En realidad, todas las funciones ya se exportaron. JavaScript generado contiene las líneas siguientes:
var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
// …
if (ENVIRONMENT_IS_NODE) {
// …
module['exports'] = Module;
}
Si usted tiene una función llamada my_fun
en el código C, entonces tendrá que Module._my_fun
definido.
Sin embargo, hay algunos problemas con este enfoque.
El optimizador puede eliminar o cambiar el nombre de algunas funciones, por lo que siempre especifíquelas pasando -s EXPORTED_FUNCTIONS="['_main','_fun_one','_fun_two']"
. Las firmas de funciones en C++ son un poco destrozadas, por lo que es aconsejable que extern "C" { … }
las que desea exportar.
Además, un enfoque directo requires JS to C type conversions. Es posible que desee ocultar mediante la adición de una nueva capa de API en el archivo agregado adjunto con --pre-js
opción:
var Module = {
my_fun: function(some_arg) {
javascript to c conversion goes here;
Module._my_fun(converted_arg) // or with Module.ccall
}
}
Module
objeto será mejorado posteriormente por todos los extras generados por emscripten, por lo que no se preocupe que se define aquí , no modificado.
Por último, seguramente querrá considerar Embind que es un mecanismo para exponer las simpáticas APIs de JavaScript provistas por Emscripten. (Requiere deshabilitar el último motor fastcomp).
Después de algunas investigaciones encontré la solución en la página wiki de emscripten '[Interactuando con el código] (https://github.com/kripken/emscripten/wiki/Interacting-with-code) ', Combinando las ** exportaciones. ** con las funciones ** Pointer_stringify ** y ** allocate ** funciona –
lostsource
@lostsource ¿me puede mostrar un ejemplo? – noamtcohen