実際には、すべての機能が既にエクスポートされています。生成されたJavaScriptは、次の行が含まれています。
var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
// …
if (ENVIRONMENT_IS_NODE) {
// …
module['exports'] = Module;
}
あなたのCコードでmy_fun
と呼ばれる機能を持っている場合、あなたはModule._my_fun
が定義されています。
しかし、このアプローチにはいくつかの問題があります。
オプティマイザは一部の機能を削除したり名前を変更したりする可能性がありますので、常に-s EXPORTED_FUNCTIONS="['_main','_fun_one','_fun_two']"
を指定してください。 C++の関数のシグネチャはビットマングルされているので、エクスポートするのはextern "C" { … }
です。
また、このような直接的アプローチrequires JS to C type conversions。あなたは--pre-js
オプションで添付追加したファイルにさらに別のAPI層を追加することによって、それを非表示にすることがあります。
var Module = {
my_fun: function(some_arg) {
javascript to c conversion goes here;
Module._my_fun(converted_arg) // or with Module.ccall
}
}
Module
オブジェクトは、後にすべてのEmscripten-生成グッズによって強化されるので、それはここで定義されていますことを心配しないでください、変更されていない。
最後に、Emscriptenが提供するすてきなJavaScript APIを公開するためのメカニズムであるEmbindを必ず考慮してください。
調査の結果、emscripten wikiページの[コードとの対話](https://github.com/kripken/emscripten/wiki/Interacting-with-code)の解決策が見つかりました。 '、**輸出を組み合わせる。 ** Pointer_stringify **および** allocate **機能を使用すると、ジョブは実行されます –
lostsource
@lostsource私は例を表示できますか? – noamtcohen