How to convert v8 :: String to const char *

i has this function in dll

static COMMANDERDLL_API int InsertCodeBar(const char* pszBuffer); 

in my node addon i have this function

 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); } 

when I try to compile, node -gyp return error: "cannot convert argument 1 from 'v8 :: Local' to 'const char *'

how to convert v8 :: String to const char *?

+5
source share
2 answers

Decided

create a ToCString function to convert V8 :: String to const char *

 use namespace v8; const char* ToCString(const String::Utf8Value& value) { return *value ? *value : "<string conversion failed>"; } 

Using:

 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); } 
+3
source

Just improve @Matheus answer:

 use namespace v8; const char* ToCString(Local<String> str) { String::Utf8Value value(str); return *value ? *value : "<string conversion failed>"; } 

And directly use:

 const char* bar = ToCString(info[0]); 
+3
source

Source: https://habr.com/ru/post/1238637/


All Articles