我目前正在将C ++应用程序中的Node.js嵌入。我在为Node.js注册自定义模块时遇到问题。
以下代码是我尝试过的(模块代码是从official docs复制而来的。)
#include <node.h>
using v8::Exception;
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Number;
using v8::Object;
using v8::String;
using v8::Value;
// This is the implementation of the "add" method
// Input arguments are passed using the
// const FunctionCallbackInfo<Value>& args struct
void Add(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
// Check the number of arguments passed.
if (args.Length() < 2) {
// Throw an Error that is passed back to JavaScript
isolate->ThrowException(Exception::TypeError(
String::NewFromUtf8(isolate, "Wrong number of arguments")));
return;
}
// Check the argument types
if (!args[0]->IsNumber() || !args[1]->IsNumber()) {
isolate->ThrowException(Exception::TypeError(
String::NewFromUtf8(isolate, "Wrong arguments")));
return;
}
// Perform the operation
double value = args[0]->NumberValue() + args[1]->NumberValue();
Local<Number> num = Number::New(isolate, value);
// Set the return value (using the passed in
// FunctionCallbackInfo<Value>&)
args.GetReturnValue().Set(num);
}
void Init(Local<Object> exports) {
NODE_SET_METHOD(exports, "add", Add);
}
NODE_MODULE_X(addon, Init, 0, NM_F_BUILTIN);
int main(int argc, char** argv)
{
return node::Start(argc, argv);
}
如您所见,我通过宏NODE_MODULE_X(addon, Init, 0, NM_F_BUILTIN)
进行注册。如果您之后致电node::get_builtin_module("addon")
,您将收到指向该模块的指针。
但是,如果您在Node.js中执行require("addon")
,则会找不到找不到模块的错误。
有什么想法吗?