如何将字符串/整数值从js传递给c ++?
我在我的nodejs项目中使用Nodejs c ++插件。 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
您可以从上面的输出中看到未正确打印字符串和整数值。我的代码有什么问题吗?
回答如下:让我们从数字开始。 ToNumber
返回Local<Number>
类型的值。它与普通的C-like值不同,printf可以消化。首先,你需要打开Local。它是v8指针式实用程序类。你可以用覆盖的*
算子来做到这一点。所以*(info[1]->ToNumber())
给了我们vazxswpoi的v8 Number孩子。但这不是故事的结局。现在我们可以从它Value拉出古老的int
。或者你可以使用事实(*(info[1]->ToNumber())).Int32Value()
祖先覆盖Handle运算符,并写如->
。
字符串案例更难。 V8使用utf8字符串,您可以使用info[1]->ToNumber()->Int32Value()
实用程序类从中获取String::Utf8Value的缓冲区。 char
通常你不需要它在v8插件中,我建议你在你的本机代码中使用v8对象(如Local,String,Number等)。