【发布时间】:2018-04-25 04:10:37
【问题描述】:
到目前为止,我一直在使用 WebAssembly,并且能够管理 emscripten 将我的测试 C++ 项目编译为 wasm 文件 em++ 为我提供了 2 个文件,即
mainTest.js mainTest.wasm
当我在我的 html 页面中加载 mainTest.js 时,我会得到一个名为的 JavaScript 对象 “模块”。
我确实找到了如何从 javascript 调用 C++/wasm 方法,例如:
var myTestInteger = Module._callMyTestMethod();
并从 Module.wasmMemory.buffer ,但我不明白如何从 C++ 代码调用 JavaScript。
即我希望能够做这样的事情:
#ifdef __cplusplus
extern "C" {
#endif
extern void testExternJSMethod();
int main()
{
cout << " Hello From my Test1 !" << endl;
testExternJSMethod();
return 0;
}
int EMSCRIPTEN_KEEPALIVE callMyTestMethod(){
return 26;
}
#ifdef __cplusplus
}
#endif
以及我在另一个名为 utils.js 的 js 文件中加载的 js 方法 testExternMethod
function testExternMethod() {
console.log("Hello from testExternMethod!" + )
}
这里我想从 C++ 调用 JavaScript testExternJSMethod。
当我在 Firefox 中运行页面时,在调试器控制台中得到“-1”。
那么在这种情况下我缺少什么?不幸的是,Mozilla 文档只给出了这些 S 表达式而不是 C++ 的示例。
我在示例中缺少什么?在 C++ 中,我使用 extern 关键字定义了该方法,即
extern void testExternJSMethod();
但我觉得这并不是我必须做的全部。
我相信我应该以某种方式将该 JavaScript 方法链接到模块,但我不知道如何。
Module.asm 给了我exports。哪个方法调用应该给我imports?因为我相信这个_testExternJSMethod() 应该是某种导入方法,所以我不知道如何得到它。
【问题讨论】:
标签: javascript c++11 emscripten webassembly