Как использовать InstanceMethod(), чтобы обернуть метод, возвращающий объект?

Работа над созданием дополнения, которое вернет Object в среду узла. Основываясь на моей работе над введением Атулом Анандом N-API в C++, методы объекта класса обернуты в InstanceMethod() разоблачить их; но эта функция хочет метод, который возвращает Napi::Value, Я не могу понять вызов для преобразования указателя C++ в Value; Value::From(env, ptr) ошибки (Visual C++ 2017) с "невозможно преобразовать из" списка инициализаторов "в" Napi::Value "".

2 ответа

Решение

Кажется, что даже когда я спрашивал здесь, кто-то еще спрашивал на сайте gitub Node-API-Addon. Изначально ответом на вопрос пользователя было то, что мне нужно, чтобы мой код работал.

Вкратце (и очевидно в ретроспективе): указатель C++ бесполезен в JavaScript, метод должен возвращать объект JavaScript, обертывающий объект C++. Объект JS поддерживается в пределах napi_ref (Napi::Reference) и ссылка Value() это то, что возвращается из метода доступа.

Вам нужно будет использовать napi_wrap и napi_unwrap в вашем собственном коде во время трансграничного доступа к объектам.
napi_unwrap (): для извлечения собственного экземпляра, который ранее был обернут в объект JavaScript
napi_wrap (): оборачивает собственный экземпляр в объект JavaScript

Следующий URL-адрес для документации оберток объекта n-api, которая содержит более подробную информацию об этом. https://nodejs.org/api/n-api.html

Следующий пример GitHub имеет такое использование
https://github.com/nodejs/node-addon-examples/tree/master/8_passing_wrapped/napi

Другие вопросы по тегам