从JavaScript调用C++函数指针

3
可以将C++中的函数指针(使用Emscripten编译成JavaScript)直接传递到手写的JS代码中吗?我已经找到了一些创建JavaScript函数的函数指针以传递给C++的方法,但没有一种方式可以在运行时将C++代码中的函数指针暴露给JavaScript。
整个代码中,我想要完成下面的代码片段,以便在我执行console.log时调用传递的函数cFunctionPointer
void passToJs(void (*cFunctionPointer)()) {
  EM_ASM_ARGS({
    // Prints out an integer. Would like to be able to
    // call the function it represents.
    console.log($0);
  }, cFunctionPointer);
}
1个回答

1

我在https://dev59.com/aoLba4cB1Zd3GeqPlvI2#25584986找到了答案。您可以使用Runtime.dynCall函数:

void passToJs(void (*cFunctionPointer)()) {
  EM_ASM_ARGS({
    Module.Runtime.dynCall('v', $0, []);
  }, cFunctionPointer);
}

'v' 是一个不带任何参数的 void 函数的签名。

显然,它还支持其他签名,例如 'vii',这是一个需要两个整数参数的 void 函数。然后,整数参数必须在 Runtime.dynCall 的第三个参数中传递数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接