node-ffi:调用带回调函数的c lib

标签 node-ffi

我想像这样调用一个 c 库,.h 文件:

typedef void (*ConnectEventCallBack)(int iBaseID, int iMode, const char* sInfo);

extern "C" __declspec(dllexport) void SetConnectEventCallBack(ConnectEventCallBack cb);

在node-ffi中,如何定义函数并使用?

最佳答案

你可以这样做:

var ffi = require('ffi');

// Interface into the native lib
var libname = ffi.Library('./libname', {
  'SetConnectEventCallBack': ['void', ['pointer']]
});

// Callback from the native lib back into js
var callback = ffi.Callback('void', ['int', 'int', 'string'],
  function(iBaseId, iMode, sInfo) {

    console.log("iBaseId: ", iBaseId);
    console.log("iMode: ", iMode);
    console.log("sInfo: ", sInfo);

  });

console.log("registering the callback");
libname.SetConnectEventCallBack(callback);
console.log('Done');

// Make an extra reference to the callback pointer to avoid GC
process.on('exit', function() {
  callback
});

C 库可以使用另一个线程调用此回调。这是安全的。在这种情况下,用于回调的 javascript 函数将在主事件循环中被触发,调用者线程将等待直到调用返回。返回值也传递给调用者线程。

请注意,您需要以某种方式保留对 ffi.Callback 返回的回调指针的引用,以避免垃圾收集。

关于node-ffi:调用带回调函数的c lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36819679/

相关文章:

javascript - Node ffi 指向结构体的指针

javascript - NodeJS : node-ffi, 引用结构、引用数组

c++ - Node-ffi 绑定(bind)到以 NULL 结尾的 C 字符串数组,但得到 `Segmentation fault: 11`

node.js - 如何在nodejs中将原始内存复制到Buffer?

Node.js - 将 `fork()` 与 node-ffi 或附加组件一起使用是否安全?

C 函数将函数作为参数传递,如何使用 node-ffi 包装此函数?

javascript - Node ffi : Dynamic Linking Error

webpack - 如何在 Electron 中为 "require(ffi)' 模块配置 webpack?

node.js - 如何在 win32-api Node 模块中使用带有 EnumWindows 的自定义结构