In realtà, tutte le funzioni sono già state esportate. Generato JavaScript contiene le righe seguenti:
var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
// …
if (ENVIRONMENT_IS_NODE) {
// …
module['exports'] = Module;
}
Se hai una funzione chiamata my_fun
nel codice C, allora si dovrà Module._my_fun
definito.
Ci sono alcuni problemi con questo approccio, però.
L'ottimizzatore può rimuovere o rinominare alcune funzioni, quindi specificarle sempre passando -s EXPORTED_FUNCTIONS="['_main','_fun_one','_fun_two']"
. Le firme delle funzioni in C++ sono un po 'storpiate, quindi è consigliabile scrivere su extern "C" { … }
quelle che si desidera esportare.
Inoltre, tale approccio diretto requires JS to C type conversions. Si consiglia di nascondere con l'aggiunta di un ulteriore livello di API nel file aggiunto allegato con --pre-js
opzione:
var Module = {
my_fun: function(some_arg) {
javascript to c conversion goes here;
Module._my_fun(converted_arg) // or with Module.ccall
}
}
Module
oggetto verrà poi arricchito da tutte le chicche Emscripten-generati, quindi non preoccupatevi che è definito qui , non modificato.
Infine, si vorrà sicuramente considerare Embind che è un meccanismo per esporre le API JavaScript fornite da Emscripten. (Richiede disabilitare il backend di fastcomp più recente.)
Dopo alcune ricerche ho trovato la soluzione nella pagina wiki emscripten '[Interagire con il codice] (https://github.com/kripken/emscripten/wiki/Interacting-with-code) ', Combinando le ** esportazioni. ** con le funzioni ** Pointer_stringify ** e ** allocate ** fa il lavoro –
lostsource
@lostsource puoi mostrarmi un esempio? – noamtcohen