NodeJS-C接口

时间:2013-04-29 00:07:17

标签: c node.js node.js-addon node-ffi

我试图弄清楚如何在C库和NodeJS模块之间传递数据。 我可以通过NodeFFI模块这样做吗?

或者我是否必须编写自己的NodeJS插件来开发C-NodeJS接口?

1 个答案:

答案 0 :(得分:4)

node-ffi文档声明:

  

node-ffi是一个Node.js插件,用于使用纯JavaScript加载和调用动态库。它可用于创建与本机库的绑定,而无需编写任何C ++代码。

您只需要访问node-ffi中所述的库以及其他地方的传递结果。在他们的来源中,他们有一个例子。假设他们在同一个目录中:

档案factorial.c

#include <stdint.h>

uint64_t factorial(int max) {
  int i = max;
  uint64_t result = 1;

  while (i >= 2) {
    result *= i--;
  }

  return result;
}

档案factorial.js

//load the ffi module
var ffi = require('ffi');

//include the function
var libfactorial = ffi.Library('./libfactorial', {
  'factorial': [ 'uint64', [ 'int' ] ]
});

if (process.argv.length < 3) {
  console.log('Arguments: ' + process.argv[0] + ' ' + process.argv[1] + ' <max>');
  process.exit();
};

//usage of the function
var output = libfactorial.factorial(parseInt(process.argv[2]));

console.log('Your output: ' + output);

使用该模块,C文件加载了:

var libfactorial = ffi.Library('./libfactorial', {
  'factorial': [ 'uint64', [ 'int' ] ]
});

然后像这样访问:

//process.argv are the command line arguments
var argument = parseInt(process.argv[2]);
var output = libfactorial.factorial(argument);