如何将 string/integer 值从 js 传递给 c++?

How to pass string/integer value from js to 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 returns 类型 Local<Number> 的值。它不同于 printf 可以消化的常规类 C 值。 首先你需要打开 Local。它是 v8 类指针实用程序 class。 您可以使用重写的 * 运算符来完成。所以 *(info[1]->ToNumber()) 给了我们 v8 Number child of Value. But this is not the end of story. Now we can pull good-old int from it (*(info[1]->ToNumber())).Int32Value(). Or you can use the fact Handle 祖先也覆盖了 -> 运算符并且写成 info[1]->ToNumber()->Int32Value().

字符串大小写更难。 V8 使用 utf8 字符串,您可以使用 String::Utf8Value 实用程序 class 从中获取 char 的缓冲区。 *(String::Utf8Value(info[0]->ToString()))

通常在 v8 插件中不需要它,我建议您在本机代码中使用 v8 对象(如 Local、String、Number 等)。

下面是解决方案:--

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