node.js调用动态库

来源:互联网 发布:淘宝网 其他淘宝流量 编辑:程序博客网 时间:2024/06/11 13:31

网上找了一大堆,看起来都是可行的,实践时有很多问题,后边在列出部分问题,这里只说一下解决,那就是这些都写的是node.js V0.10.*之前的,现在我装的是v6.11.0

所以说文章还是要写清楚。

代码不复杂,这里分别列出:

C++ 动态库的程序

官方提到了,最重要的就是下面这里。

void Initialize(Local<Object> exports);NODE_MODULE(module_name, Initialize)


// hello.cc#include <node.h>namespace demo {using v8::FunctionCallbackInfo;using v8::Isolate;using v8::Local;using v8::Object;using v8::String;using v8::Value;void Method(const FunctionCallbackInfo<Value>& args) {  Isolate* isolate = args.GetIsolate();  args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));}void init(Local<Object> exports) {  NODE_SET_METHOD(exports, "hello", Method);}NODE_MODULE(addon, init)}  // namespace demo

在写一个binding.gyp 注意其中的addon和cc文件中结尾的NODE_MODULE的第一个参数一样,sources就不用多说了。


{  "targets": [    {      "target_name": "addon",      "sources": [ "hello.cc" ]    }  ]}

再准备一个调用的js 文件

// hello.jsconst addon = require('./build/Release/addon');console.log(addon.hello());// Prints: 'world'

路径将来可以改,由于这里编译后就是这个路径,就不改了。

好了,三个程序放到一个目录下

然后cmd进入这个目录,(这里是windows啊)

分别输入

node-gyp configure

node-gyp build

node hello.js

你就可以看到屏幕输出 world  

什么,你出错了~~~~~,那要看看你准备的工具是不是全了,我装了vs2010和vs2015,其实这两个有一个就应该可以。在configure的时候可以指定。

node.js安装了,还要安装node-gyp,以及python2.7,不能是3.X以上的版本。这些有很多帖子可以介绍,我就不说了。

最后截图

这是成功的。



失败的图,因为代码用的是搜到的老版本的


看到这些,你要看看的C++代码是不是下面

#include <node.h>#include <v8.h>using namespace v8; // 这里是 hello 函数的 C++ 实现部分Handle<Value> Method(const Arguments& args) {  HandleScope scope;  return scope.Close(String::New("world"));} // 这里是模块的初始化函数,必须有void init(Handle<Object> exports) {  exports->Set(String::NewSymbol("hello"),      FunctionTemplate::New(Method)->GetFunction());} // 这里定义本模块的名字和初始化函数NODE_MODULE(hello, init)
那恭喜了,你要么安装node.js v0.10以前的版本,要么就别看它了!!!!