我在nodejs项目中使用Nodejs c ++ addon。 JS使用字符串作为参数调用c ++中定义的方法。我无法在c ++中获取字符串。下面是我在c ++中的代码:
NAN_METHOD(DBNode::Test){
printf("Hello\n");
printf("%s\n", info[0]->ToString());
printf("%d\n", info[1]->ToNumber());
}
以下是我的js代码:
const test = require('./build/Release/test.node');
test.test('ssss', 99);
以下是输出:
$ node demo.js
Hello
?ڄ?C
-272643000
您可以从上面的输出中看到未正确打印字符串和整数值。我的代码有什么问题吗?
答案 0 :(得分:2)
让我们从数字开始。 ToNumber
返回Local<Number>
类型的值。它与普通的C-like值不同,printf可以消化。
首先,您需要解开Local。它是v8指针式实用程序类。
您可以使用覆盖*
运算符来完成此操作。因此,*(info[1]->ToNumber())
为我们提供了Number的v Value孩子。但这不是故事的结局。现在我们可以从它int
中提取好的(*(info[1]->ToNumber())).Int32Value()
。或者您也可以使用事实Handle祖先覆盖->
运算符,并写为info[1]->ToNumber()->Int32Value()
。
字符串案例更难。 V8使用utf8字符串,您可以使用String::Utf8Value实用程序类从中获取char
的缓冲区。 *(String::Utf8Value(info[0]->ToString()))
通常你在v8插件中不需要它,我建议你在你的本机代码中使用v8对象(比如Local,String,Number等)。
答案 1 :(得分:0)
下面是解决方法:-
NAN_METHOD(updateSignalValue) {
Nan::Utf8String lSignal(info[0]);
int len = lSignal.length();
if (len <= 0) {
return Nan::ThrowTypeError("arg must be a non-empty string");
}
std::cout << "\n hello lSignal value is :"<
关于Rakesh Kumar Jha,