2

我想调用ac lib,.h文件是这样的:

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

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

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

4

1 回答 1

1

你可以这样做:

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某种方式保留对返回的回调指针的引用以避免垃圾收集。

于 2016-07-14T06:07:47.303 回答