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,更新中。。。