我的目标是在Node.js中运行一个函数,并提供一个字符串作为参数/参数:
const myAddon = require('path'); myAddon.myFunc(otherData, "Hello World");
根据堆栈溢出的答案,我尝试了以下几点:
v8::String::Utf8Value STR_ARG(args[1]->ToString());
std::string USER_MESSAGE = std::string(*STR_ARG);
这不起作用,我收到了一条错误消息:
ToString函数不接受0参数。
我应该给函数任何输入吗?如果是,什么?
发布于 2020-08-11 17:11:42
我试图在我的问题中找到的解决办法没有奏效。如果它对你也不起作用,这是对我有用的密码。
v8::Local<v8::String> argsINPUT;
argsINPUT = args[0].As<v8::String>();
//Having a Second Argument to determine the Buffer Size is Optional but Optimal
//new char[insert any int] is also okay, but it should be large enough to hold the Data
char* args_buffer = new char[args[1].As<Number>()->Value()];
//If the Next Line thows an Error try out '(argsINPUT*)' instead of 'argsINPUT'
argsINPUT->WriteUtf8(isolate, args_buffer);
static std::string finalString;
finalString.assign(args_buffer);
delete args_buffer;
args.GetReturnValue().Set(String::NewFromUtf8(
isolate, finalString.c_str()).ToLocalChecked());
给Cybafelo的贷款:
Convert std::string to v8::string and viceversa?
Botje帮我解决了我最初的方法
编辑:为什么args[1].As<Number>()->Value()
作为缓冲区大小可能是最优的:
js代码示例:
const myAddon = require('path');
const myString = "Hello World";
myAddon.myFunc(myString, myString.length + 1);
您可以看到并且可能知道,Js为我们提供了属性和函数,其中之一是length属性,因此我们可以直接创建一个完全大小的缓冲区。+1位于末尾,因为我不确定我们是否也需要"\0“的空间
https://stackoverflow.com/questions/63358596
复制相似问题