2015-12-18 3 views
5

я иметь эту функцию в DLLКак преобразовать v8 :: String на константный символ *

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

при попытке компиляции, узел-Gyp возвращать ошибку: «не может преобразовать аргумент 1 из 'v8 :: Local' к 'сопзЬ символ *'

как преобразовать v8 :: String на константные обугленного *

?

ответ

3

Решенный

создать функцию ToCString для преобразования V8 :: String на константные символ *

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

Использование:

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

Просто улучшить @ ответ Матеус в:

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

И прямое использование:

const char* bar = ToCString(info[0]); 
Смежные вопросы