node.js调用动态库

网上找了一大堆,看起来都是可行的,实践时有很多问题,后边在列出部分问题,这里只说一下解决,那就是这些都写的是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.js
const 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以前的版本,要么就别看它了!!!!






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值