我正在编写一个自定义 Node.js 插件。除了使用回调之外,一切都很好。我在 DLL 中有一个需要注册 C++ 函数回调的方法——它接受一个函数,然后在接收到新数据时调用它,这很简单。我想做的是在我的 .cc 文件中,传递一个本地方法,当该方法被触发时,调用 JavaScript 回调。自己调用 JavaScript 回调,并保存回调并稍后调用它可以正常工作。
在我的 addon.cc 中,我有一个除了调用保存的回调之外什么都不做的方法:
static int __stdcall ReadCallback(RESULT* pResult){
const unsigned argc = 1;
v8::Local<v8::Value> argv[argc] = { Nan::New("bah").ToLocalChecked() };
Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback, argc, argv);
return 0;
}
我有一个可调用的公开节点方法:
void RunCallback(const Nan::FunctionCallbackInfo<v8::Value>& info) {
PipsLibrary::Functions::RegisterReadCallback(ReadCallback);
v8::Local<v8::Function> cb = info[0].As<v8::Function>();
callback = cb;
}
我调用外部 C++ .DLL 的所有其他节点方法都可以工作,它只是将此函数作为 .cc 的参数传递,运行时会引发错误,“未捕获错误:找不到指定的过程。”
不确定问题是什么,或者我是否可以在 .cc 文件中指定一个方法作为回调传递给 C++。