Доступ к SDK устройства, написанному на C ++, из узла JS - PullRequest
0 голосов
/ 13 декабря 2018

Ниже также приведена ссылка на Доступ к SDK, который написан на c ++ с использованием node.js

У нас есть устройство , которое может сканировать документ / штрих-код/ QR-код и дать вывод через USB.Производитель устройства предоставил один SDK, который написан только на csharp, c ++, java.Теперь мы решили перейти к коду C ++ с узла.После нескольких часов боли я смог запустить этот код на C ++, и оказалось, что это консольное приложение, которое печатает данные отсканированного документа в консоли и сохраняет отсканированный документ в определенном месте.Теперь требуется, чтобы независимо от того, что устройство делало с кодом c ++, мы должны делать это и с узла, кроме печати в консоли, вместо этого мы должны отображать его в нашем веб-приложении, разработанном с использованием Angular.В Интернете есть несколько решений, таких как NAPI и c ++ Addon от Node, SWIG для создания класса-оболочки.Я немного запутался в том, что делать дальше, потому что я понятия не имею, как будут работать оба предложенных выше способа или даже выполнимо для упомянутого требования.А также я хочу использовать SDK, предоставленный производителем устройства, поскольку он содержит все / большинство функций устройства.

Подводя итог вышеприведенному длинному требованию:

  • У меня есть c ++ SDK, который связывается с устройством, и я хочу использовать этот код c ++ для доступа из node.js, как я могу продолжить?Если я собираюсь использовать любой из вышеперечисленных способов, нужно ли переписать код c ++ для доступа из node.js

  • c ++ SDK, предоставленного производителем устройства, если хочешь посмотреть.Он имеет c ++, csharp, java, но мы можем сосредоточиться на c ++

Весь код в вышеупомянутой ссылке защищен авторскими правами производителя устройства.Я не имею никаких претензий по этому поводу

1 Ответ

0 голосов
/ 20 декабря 2018

Для интерфейсов C ++ вы должны создать аддон C ++ для узла.Аддон предоставит функции узлу в виде модуля, например const myCppApi = require('bindings)('yourNativeAddonName'), разница в том, что код модуля - это не javascript, а встроенная оболочка, которая выполняет вызовы скомпилированного кода.Или, другими словами, где вы можете использовать C ++ API вашего сканера бара.

Примеры этого можно найти в Документах API node.js https://nodejs.org/api/addons.html

Для вашей цели я бырекомендуем использовать N-API и пренебрегать другими методами, потому что N-API не полагается на то, что вы слишком много знаете о v8 (v8:: пространство имен, изоляты, контексты и т. д.) и о том, как работает хром.Вместо этого все упрощено.

В этом примере репозитория можно узнать, как работать с N-API https://github.com/nodejs/abi-stable-node-addon-examples/tree/master/1_hello_world/napi

Полезный совет: поскольку я видел, что вы используете электрон, убедитесь, чтопостроить свой модуль с той же версией узла, которую использует ваш электрон.Вы можете проверить их, напечатав process.version в основном процессе или заблокировав их на странице электроники.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...