3 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
看一下node-ffi。
node-ffi是一個(gè)Node.js插件,用于使用純JavaScript加載和調(diào)用動(dòng)態(tài)庫。它可用于創(chuàng)建與本機(jī)庫的綁定,而無需編寫任何C ++代碼。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
現(xiàn)在對(duì)該問題有了新的答案。從版本3.0開始,SWIG似乎為Node.js,Webkit和v8 提供了JavaScript接口生成器。
我已經(jīng)在Java和Python上廣泛使用SWIG一段時(shí)間了,一旦您了解SWIG的工作原理,就幾乎不需要花力氣(與ffi或目標(biāo)語言中的等效語言相比)就可以將C ++代碼與SWIG語言連接支持。
舉一個(gè)小例子,假設(shè)您有一個(gè)標(biāo)頭為myclass.h的庫:
#include<iostream>
class MyClass {
int myNumber;
public:
MyClass(int number): myNumber(number){}
void sayHello() {
std::cout << "Hello, my number is:"
<< myNumber <<std::endl;
}
};
為了在節(jié)點(diǎn)中使用此類,您只需編寫以下SWIG接口文件(mylib.i):
%module "mylib"
%{
#include "myclass.h"
%}
%include "myclass.h"
創(chuàng)建綁定文件binding.gyp:
{
"targets": [
{
"target_name": "mylib",
"sources": [ "mylib_wrap.cxx" ]
}
]
}
運(yùn)行以下命令:
swig -c++ -javascript -node mylib.i
node-gyp build
現(xiàn)在,從同一文件夾運(yùn)行節(jié)點(diǎn),您可以執(zhí)行以下操作:
> var mylib = require("./build/Release/mylib")
> var c = new mylib.MyClass(5)
> c.sayHello()
Hello, my number is:5
即使我們需要為這樣一個(gè)小示例編寫2個(gè)接口文件,也請(qǐng)注意我們不必MyClass在sayHello任何地方提及構(gòu)造函數(shù)或方法,SWIG會(huì)發(fā)現(xiàn)這些內(nèi)容并自動(dòng)生成自然接口。
添加回答
舉報(bào)