6

私はdllにこの関数を持っています

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

コンパイルしようとすると、node-gyp がエラーを返します: 「引数 1 を 'v8::Local' から 'const char *' に変換できません。

v8::String を const char * に変換する方法は?

4

2 に答える 2

4

解決済み

V8::String を const char に変換する関数 ToCString を作成します *

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);
}
于 2015-12-18T15:27:29.090 に答える