C++ 如何将v8::String转换为const char*
我在dll中有这个函数C++ 如何将v8::String转换为const char*,c++,node.js,v8,node-gyp,node.js-addon,C++,Node.js,V8,Node Gyp,Node.js Addon,我在dll中有这个函数 static COMMANDERDLL_API int InsertCodeBar(const char* pszBuffer); 在我的节点插件中,我有这个函数 void InsertCodeBarWrapper(const FunctionCallbackInfo<Value>& args){ Isolate* isolate = args.GetIsolate(); Local<Function> cb = Loc
static COMMANDERDLL_API int InsertCodeBar(const char* pszBuffer);
在我的节点插件中,我有这个函数
void InsertCodeBarWrapper(const FunctionCallbackInfo<Value>& args){
Isolate* isolate = args.GetIsolate();
Local<Function> cb = Local<Function>::Cast(args[1]);
Local<String> bar = args[0]->ToString();
const unsigned argc = 1;
Local<Value> argv[argc] = { CSGPCommander::InsertCodeBar(bar) };
cb->Call(isolate->GetCurrentContext()->Global(), argc, argv);
}
void InsertCodeBarWrapper(常量函数callbackinfo&args){
隔离*隔离=args.GetIsolate();
Local cb=Local::Cast(args[1]);
本地条=args[0]->ToString();
常量无符号argc=1;
本地argv[argc]={CSGPCommander::InsertCodeBar(bar)};
cb->调用(隔离->GetCurrentContext()->Global(),argc,argv);
}
当我尝试编译时,节点gyp返回错误:“无法将参数1从“v8::Local”转换为“const char*”
如何将v8::String转换为const char*?已解决
创建一个函数ToCString,将V8::String转换为const char*
use namespace v8;
const char* ToCString(const String::Utf8Value& value) {
return *value ? *value : "<string conversion failed>";
}
使用名称空间v8;
常量字符*ToCString(常量字符串::Utf8Value和value){
返回*值?*值:“”;
}
用法:
void InsertCodeBarWrapper(const FunctionCallbackInfo<Value>& args){
Isolate* isolate = args.GetIsolate();
Local<Function> cb = Local<Function>::Cast(args[1]);
String::Utf8Value str(args[0]);
const char* bar = ToCString(str);
const unsigned argc = 1;
Local<Value> argv[argc] = { CSGPCommander::InsertCodeBar(bar) };
cb->Call(isolate->GetCurrentContext()->Global(), argc, argv);
}
void InsertCodeBarWrapper(常量函数callbackinfo&args){
隔离*隔离=args.GetIsolate();
Local cb=Local::Cast(args[1]);
字符串::Utf8Value str(args[0]);
常量字符*bar=ToCString(str);
常量无符号argc=1;
本地argv[argc]={CSGPCommander::InsertCodeBar(bar)};
cb->调用(隔离->GetCurrentContext()->Global(),argc,argv);
}
只要改进@Matheus的答案:
use namespace v8;
const char* ToCString(Local<String> str) {
String::Utf8Value value(str);
return *value ? *value : "<string conversion failed>";
}
这给了我一个错误:
error:没有匹配的函数来调用'v8::String::Utf8Value::Utf8Value(v8::Local&)'8 | String::Utf8Value(str)
一个完整性问题:该字符的生存期值是多少*?它是否需要自己清理?当底层本地句柄清理后,它是否不再存在?因为在您的回答中,您看起来是1)复制本地句柄,2)在要清理的堆栈上创建字符串::UTF8当价值被传回,冒着汽车被清理的风险?
const char* bar = ToCString(info[0]);