node.js使用c++扩展遇到相关问题

1,生成的.node文件名必须与代码中“NODE_MODULE(module_name, Initialize)”里的module_name相同,否则加载.node会出现类似“cannot find module XXXX_module”的错误。(这一点其实官网文档就有提到)

2,从v8(/c++)返回一段内存至js。

HandleScope scope;

node::Buffer *slowBuffer = node::Buffer::New(nSize); 
//memcpy给(BYTE*)node::Buffer::Data(slowBuffer)填好内容 
return scope.Close(slowBuffer->handle_);

3,c++回调js的函数,有个参数指向一段内存。

 const unsigned argc = 2; 
 node::Buffer *slowBuffer = node::Buffer::New(nSize);
 memcpy(node::Buffer::Data(slowBuffer), pBuffer, nSize);
 v8::Local<v8::Object> global = v8::Context::GetCurrent()->Global();
 v8::Local<v8::Function> BufferConstructor = v8::Local<v8::Function>::Cast(global->Get(v8::String::New("Buffer")));
 v8::Handle<v8::Value> argsl[3] = { slowBuffer->handle_, v8::Integer::New(nSize), v8::Integer::New(0) };
 Local<Value> argv[argc] = { Local<Value>::New(m_pCallbackParam), v8::Local<v8::Object>::New(BufferConstructor->NewInstance(3, argsl))};
 m_pCallback->Call(Context::GetCurrent()->Global(), argc, argv); 

4,js传字符串给c++。js层没有什么特别的处理,c++接收时,

String::Utf8Value param1(args[3]->ToString());  
char * pAppName = *param1;

5,js传一段内存给c++。

 if(node::Buffer::HasInstance(args0)) {
  nSize  = node::Buffer::Length(args0->ToObject());
  pBuffer = (BYTE*)node::Buffer::Data(args0->ToObject());
 }

6,只有在主线程中才能使用v8相关的东西。可以使用nodejs里用的libuv,从子线程通知主线程。

7,更新中。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值