javascript - 从 Javascript 调用 C++ 函数指针

标签 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);
}

最佳答案

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/

相关文章:

gcc - 如何在 Emscripten 中设置 gcc 标志

c++ - 如何将 C++ 类编译为 wasmer 的 .wasm 文件?

javascript - Emscripten:如何从javascript获取c中的char数组

javascript - 使用 JavaScript 更改使用 <button> 文本创建的按钮

javascript - Highcharts JS - 热图设置 gridLineWidth

javascript - 指定时间的循环功能,然后是延迟

c++ - OpenCV : algorithm for simple image rotation and reduction

javascript - 为什么 Javascript 返回 [object Object]?

c++ - 使用 c++0x - 安全吗?

c++ - 修改 cin 以也返回换行符