首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-ffi:使用回调函数调用c lib

node-ffi:使用回调函数调用c lib
EN

Stack Overflow用户
提问于 2016-04-24 13:38:05
回答 1查看 3.1K关注 0票数 2

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

代码语言:javascript
复制
typedef void (*ConnectEventCallBack)(int iBaseID, int iMode, const char* sInfo);

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

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

EN

回答 1

Stack Overflow用户

发布于 2016-07-14 14:07:47

你可以这样做:

代码语言:javascript
复制
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返回的回调指针的引用,以避免垃圾收集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36819679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档