【问题标题】:How to use InstanceMethod() to wrap a method returning an Object?如何使用 InstanceMethod() 包装返回对象的方法?
【发布时间】:2019-05-15 17:44:24
【问题描述】:

致力于创建一个将Object 返回到节点环境的附加组件。我的工作基于Atul Anand's introduction to N-API in C++,类对象的方法封装在InstanceMethod() 中以公开它们;但该函数需要一个返回Napi::Value 的方法。我无法弄清楚将 C++ 指针转换为Value 的调用; Value::From(env, ptr) 错误 (Visual C++ 2017) 与“无法从 'initializer list' 转换为 'Napi::Value'”。

【问题讨论】:

    标签: node.js node-addon-api n-api


    【解决方案1】:

    似乎即使我在这里问,其他人在 Node-API-Addon github 站点上也是 asking。最初发布给用户问题的解决方案是我需要让我的代码正常工作。

    简而言之(回想起来很明显):C++ 指针在 JavaScript 中是无用的,该方法需要返回一个包装 C++ 对象的 JavaScript 对象。 JS 对象在napi_ref (Napi::Reference) 中维护,引用的Value() 是访问方法返回的内容。

    【讨论】:

      【解决方案2】:

      在跨边界对象访问期间,您必须在本机代码中使用 napi_wrapnapi_unwrap
      napi_unwrap():检索以前包装在 JavaScript 对象中的本机实例
      napi_wrap():将本机实例包装在 JavaScript 对象中

      以下 URL 用于 n-api 文档 Object Wrap,其中包含有关它的更多详细信息。 https://nodejs.org/api/n-api.html#n_api_object_wrap

      下面的github例子有这个用法
      https://github.com/nodejs/node-addon-examples/tree/master/8_passing_wrapped/napi

      【讨论】:

      • 不是那么有用:如果你['d阅读我发布的链接,你会看到我正在使用 N-API C++ 包装类,它隐藏了 napi_XXX API 调用,并且 是我想解决的问题。对深入挖掘并不是很感兴趣,但无论如何我不得不这样做,因为 N-API 的文档很少。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多