【问题标题】:Transfering v8 types to c++ types (string)将 v8 类型转换为 c++ 类型(字符串)
【发布时间】:2020-11-22 20:44:10
【问题描述】:

我正在为 node.js 制作一个 c++ 插件,但我正在努力传递和获取数据。我了解如何将 v8::Number 转换为 double,将 double 转换为 v8::Number 并将 int 转换为 v8:Number,但我需要更多。主要是 v8::String 到 std::string 和返回,v8::Number 到 int 和 v8::Array 到 Array 和返回。将 js 对象传输到一些 c++ 变量也很好,但它的必要性较小。有人知道,该怎么做? 附言我查看了文档,但没有发现任何关于数组和对象的信息,根据字符串只有这个string a (*v8::String::Utf8Value(args[0]->ToString()))。但它不起作用,我收到错误error C2660: v8::Value::ToString: function does not get 0 argumentserror C2512: v8::String::Utf8Value: no suitable default constructor。我没有更多的想法如何实现它。有人可以帮忙吗? 而且我还尝试通过从 c++ 返回数据来做一些事情。以这种方式args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, "world").ToLocalChecked()); 它可以工作,但如果我这样做:

    string s = "world";
    args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, s).ToLocalChecked());

我收到一个错误error C2664: "v8::MaybeLocal<v8::String> v8::String::NewFromUtf8(v8::Isolate *,const char *,v8::NewStringType,int)": cannot convert argument 2 from "std::string" to "const char *"

而且我不知道这里出了什么问题。有人有使用 c++ 插件和 v8 类型的经验吗?怎么做?

【问题讨论】:

  • 错误信息cannot convert argument 2 from "std::string" to "const char *"有什么不清楚的地方?
  • 很清楚,但我想将字符串(不是 const char *)转换为 v8::String(也不是 const char *)以将其提供给节点应用程序。
  • 嗯..它的工作原理。非常感谢。我将阅读有关此功能的信息,以前从未使用过它。返回字符串现在有效。但是如何获取字符串(将 args[0] 中的 v8::String 转换为 std::string)
  • 我阅读并尝试使用 writeUtf8,但它在此函数上给出了相同的错误:function does not get 0 arguments

标签: c++ node.js string types v8


【解决方案1】:

为了理解 v8::String,最新版本的文档帮助:https://v8docs.nodesource.com/node-14.1/d4/d1b/classv8_1_1_string_1_1_utf8_value.html(自 Node 0.8 以来,一些签名已经发生了一些变化——如果你强烈建议学习如何理解编译器的错误消息想用 C++ 开发!)。

要了解std::string,请参阅一些 C++ 文档,例如:https://en.cppreference.com/w/cpp/string/basic_string

如果需要实际示例,可以查看 V8 的 samples/process.cc,它有一个函数 ObjectToString,可以将任何 JS 对象(例如 v8::String)转换为 std::string。只有两行!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多