如何将字符串/整数值从js传递给c ++?

时间:2017-12-15 23:13:52

标签: node.js node-gyp

我在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

您可以从上面的输出中看到未正确打印字符串和整数值。我的代码有什么问题吗?

2 个答案:

答案 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,