如何使用 InstanceMethod() 包装返回对象的方法?

How to use InstanceMethod() to wrap a method returning an Object?

正在创建一个将 return Object 添加到节点环境的插件。基于我的工作 Atul Anand's introduction to N-API in C++,class 对象的方法被包装在 InstanceMethod() 中以暴露它们;但是该函数需要一个 return 是 Napi::Value 的方法。我无法弄清楚将 C++ 指针转换为 Value 的调用; Value::From(env, ptr) 错误 (Visual C++ 2017) "cannot convert from 'initializer list' to 'Napi::Value'".

似乎就在我在这里问的时候,asking 在 Node-API-Addon github 站点。最初发布到用户问题的解决方案是我需要让我的代码正常工作的解决方案。

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

在跨边界对象访问期间,您必须在本机代码中使用 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