将v8参数转换为std :: string

问题描述

我的目标是在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个参数。

我应该为函数提供任何输入吗?如果是,那是什么?

解决方法

我在“问题”中尝试使用的解决方案无法正常工作。如果它也不适合您,这是对我有用的代码。

        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属性,因此我们可以直接创建一个大小完美的Buffer。 +1在末尾,因为我不确定我们是否也需要为“ \ 0”提供空间