Я пытаюсь выяснить, как передавать данные между библиотекой C и модулем NodeJS. Могу ли я сделать это через модуль NodeFFI?Интерфейс NodeJS-C
Или мне нужно написать собственный аддон NodeJS для разработки интерфейса C-NodeJS?
Я пытаюсь выяснить, как передавать данные между библиотекой C и модулем NodeJS. Могу ли я сделать это через модуль NodeFFI?Интерфейс NodeJS-C
Или мне нужно написать собственный аддон NodeJS для разработки интерфейса C-NodeJS?
В 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);