|
你也能传 JavaScript 函数给 C++ 函数,并执行它。 在 addon.cc 中:
- // addon.cc
- #include <node.h>
- using namespace v8;
- void RunCallback(const FunctionCallbackInfo<Value>& args) {
- Isolate* isolate = Isolate::GetCurrent();
- HandleScope scope(isolate);
- Local<Function> cb = Local<Function>::Cast(args[0]);
- const unsigned argc = 1;
- Local<Value> argv[argc] = { String::NewFromUtf8(isolate, "hello world") };
- cb->Call(isolate->GetCurrentContext()->Global(), argc, argv);
- }
- void Init(Handle<Object> exports, Handle<Object> module) {
- NODE_SET_METHOD(module, "exports", RunCallback);
- }
- NODE_MODULE(addon, Init)
复制代码 注意,这个例子中使用了 Init() 里的 2 个参数,module对象是第二个参数。它允许 addon 使用一个函数完全重写 exports。
可以用以下的代码来测试:
- // test.js
- var addon = require('./build/Release/addon');
- addon(function(msg){
- console.log(msg); // 'hello world'
- });
复制代码
|
|