Thực tế, tất cả các chức năng đã được xuất. Tạo JavaScript chứa dòng sau:
var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
// …
if (ENVIRONMENT_IS_NODE) {
// …
module['exports'] = Module;
}
Nếu bạn có một chức năng gọi là my_fun
trong mã C của bạn, sau đó bạn sẽ phải Module._my_fun
xác định.
Tuy nhiên, có một số vấn đề với phương pháp này.
Trình tối ưu hóa có thể xóa hoặc đổi tên một số chức năng, vì vậy hãy luôn chỉ định chúng đi qua -s EXPORTED_FUNCTIONS="['_main','_fun_one','_fun_two']"
. Chữ ký chức năng trong C++ có chút bị xáo trộn, do đó, nó là khôn ngoan để extern "C" { … }
những cái mà bạn muốn xuất.
Hơn nữa, cách tiếp cận trực tiếp như vậy requires JS to C type conversions. Bạn có thể muốn giấu nó bằng cách thêm một lớp API trong tập tin thêm vào kèm theo --pre-js
tùy chọn:
var Module = {
my_fun: function(some_arg) {
javascript to c conversion goes here;
Module._my_fun(converted_arg) // or with Module.ccall
}
}
Module
đối tượng sau sẽ được tăng cường bởi tất cả các goodies Emscripten tạo ra, do đó, không lo lắng rằng nó được định nghĩa ở đây , không được sửa đổi.
Cuối cùng, bạn chắc chắn sẽ muốn xem xét Embind là cơ chế để hiển thị các API JavaScript tốt được cung cấp bởi Emscripten. (Yêu cầu tắt phụ trợ fastcomp mới nhất.)
Sau một số nghiên cứu, tôi đã tìm thấy giải pháp trên trang wiki emstten '[Tương tác với mã] (https://github.com/kripken/emscripten/wiki/Interacting-with-code) ', Kết hợp các ** xuất khẩu. ** với chức năng ** Pointer_stringify ** và ** allocate ** thực hiện công việc –
lostsource
@lostsource bạn có thể cho tôi xem ví dụ không? – noamtcohen