从 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
.
的第三个参数
是否可以将函数指针从 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
.