是否可以将函数指针从 C++(使用 Emscripten 编译成 Javascript)传递给直接编写的 JS?我找到了创建 Javascript 函数的函数指针以传递给 C++ 的方法,但没有找到将函数指针(在 C++ 代码中在运行时给定值)公开给 Javascript 的方法。
代码范围内,我所追求的是能够完成下面的代码片段,以便调用作为 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($0);
}, cFunctionPointer);
}
最佳答案
在 https://stackoverflow.com/a/25584986/1319998 找到了答案.您可以使用 Runtime.dynCall
函数:
void passToJs(void (*cFunctionPointer)()) {
EM_ASM_ARGS({
Module.Runtime.dynCall('v', $0, []);
}, cFunctionPointer);
}
'v'
是不接受任何参数的 void 函数的签名。
显然它支持其他签名,例如 'vii'
,这是一个带有 2 个整数参数的 void 函数。然后必须将整数参数传递到数组中,这是 Runtime.dynCall
的第三个参数。
关于javascript - 从 Javascript 调用 C++ 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29319208/