如何将 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
我在我的 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