eno*_*ram 78
现在有一个新问题的答案.从版本3.0开始,SWIG似乎为Node.js,Webkit和v8 提供了javascript接口生成器.
我已经将SWIG广泛用于Java和Python一段时间了,一旦你理解了SWIG如何工作,几乎没有任何努力(与ffi或目标语言中的等价物相比)将C++代码与SWIG语言连接起来所需的努力支持.
举一个小例子,假设你有一个带有标题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;
}
};
Run Code Online (Sandbox Code Playgroud)
要在节点中使用此类,只需编写以下SWIG接口文件(mylib.i):
%module "mylib"
%{
#include "myclass.h"
%}
%include "myclass.h"
Run Code Online (Sandbox Code Playgroud)
创建绑定文件binding.gyp:
{
"targets": [
{
"target_name": "mylib",
"sources": [ "mylib_wrap.cxx" ]
}
]
}
Run Code Online (Sandbox Code Playgroud)
运行以下命令:
swig -c++ -javascript -node mylib.i
node-gyp build
Run Code Online (Sandbox Code Playgroud)
现在,从同一个文件夹运行节点,你可以这样做:
> var mylib = require("./build/Release/mylib")
> var c = new mylib.MyClass(5)
> c.sayHello()
Hello, my number is:5
Run Code Online (Sandbox Code Playgroud)
即使我们需要为这样一个小例子编写2个接口文件,请注意我们不必MyClass在sayHello任何地方提及构造函数和方法,SWIG发现这些东西,并自动生成自然界面.
Vad*_*hev 63
看一下node-ffi.
node-ffi是一个Node.js插件,用于使用纯JavaScript加载和调用动态库.它可用于创建与本机库的绑定,而无需编写任何C++代码.
Ale*_*lex 19
您可以使用node.js扩展来为C++代码提供绑定.这是一个涵盖以下内容的教程:
http://syskall.com/how-to-write-your-own-native-nodejs-extension
小智 11
您可以使用emscripten将C++代码编译为js.