从Javascript调用C ++函数指针

时间:2015-03-28 15:55:29

标签: javascript c++ emscripten

是否可以将函数指针从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);
}

1 个答案:

答案 0 :(得分:1)

https://stackoverflow.com/a/25584986/1319998找到答案。您可以使用Runtime.dynCall功能:

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

'v'是无效函数的签名。

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