从 Javascript 调用 C++ 函数指针

Call C++ function pointer from Javascript

是否可以将函数指针从 C++(使用 Emscripten 编译成 Javascript)传递给直接编写的 JS?我找到了创建 Javascript 函数的函数指针以传递给 C++ 的方法,但没有找到一种将函数指针公开给 Javascript.[=14 的方法,在运行时在 C++ 代码中给定一个值=]

代码范围内,我所追求的是能够完成下面的代码片段,以便调用作为 cFunctionPointer 传递的函数,我正在执行 console.log

void passToJs(void (*cFunctionPointer)()) {
  EM_ASM_ARGS({
    // Prints out an integer. Would like to be able to
    // call the function it represents.
    console.log([=11=]);
  }, cFunctionPointer);
}

在 找到了答案。您可以使用 Runtime.dynCall 函数:

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

'v' 是不接受任何参数的 void 函数的签名。

显然它支持其他签名,例如 'vii',这是一个带有 2 个整数参数的 void 函数。然后整数参数必须传入数组,这是 Runtime.dynCall.

的第三个参数