c++ - 如何将 v8::String 转换为 const char *

标签 c++ node.js v8 node-gyp node.js-addon

我在dll中有这个函数

static COMMANDERDLL_API int InsertCodeBar(const char* pszBuffer);

在我的 Node 插件中我有这个功能

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 *?

最佳答案

已解决

创建一个 ToCString 函数将 V8::String 转换为 const char *

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

关于c++ - 如何将 v8::String 转换为 const char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34356686/

相关文章:

c++ - 检测未定义行为的 C++ 实现?

c++ - 获取域 Controller 名称

node.js - 如何在windows中打开多个nodejs命令提示符?

javascript - 为什么由 setTimeout 拆分的工作负载仍然会卡住浏览器?

javascript - Array.prototype.includes 中的错误?

c++ - 使用 cout 的双重表示

c++ - 谁能告诉我我用getline格式化(cpp)出错了

javascript - 对重叠事件进行 Sequelize 查询

node.js - 无法使用 Node App Engine 和 TypeOrm 连接到 Google Cloud SQL

javascript - JavaScript 会编译成二进制吗?