呼叫C++;来自Javascript的函数指针 是否可以将函数指针从C++(编译成使用ESPRONTEN的JavaScript)直接写入JS?我已经找到了创建JavaScript函数指针的方法,可以传递给C++,但不是一个函数指针的方法,它在C++代码中运行时给出一个值,并将其转换为JavaScript。

呼叫C++;来自Javascript的函数指针 是否可以将函数指针从C++(编译成使用ESPRONTEN的JavaScript)直接写入JS?我已经找到了创建JavaScript函数指针的方法,可以传递给C++,但不是一个函数指针的方法,它在C++代码中运行时给出一个值,并将其转换为JavaScript。,javascript,c++,emscripten,Javascript,C++,Emscripten,代码范围内,我要做的是能够完成下面的代码片段,以便调用作为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); }, 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($0);
  }, cFunctionPointer);
}
在上找到答案。您可以使用
Runtime.dynCall
功能:

void passToJs(void (*cFunctionPointer)()) {
  EM_ASM_ARGS({
    Module.Runtime.dynCall('v', $0, []);
  }, cFunctionPointer);
}
'v'
是不接受任何参数的void函数的签名

显然,它支持其他签名,例如
'vii'
,这是一个接受2个整数参数的void函数。然后必须将整数参数传递到数组中,该数组是
Runtime.dynCall
的第三个参数