c++ - 从 Node JS 访问用 C++ 编写的设备 SDK

标签 c++ node.js dll electron

以下也引用Accessing an SDK that is written in c++ using node.js

我们有一个 device可以扫描文档/条形码/二维码并通过 USB 输出。设备制造商提供了一个仅用 csharp、c++、java 编写的 SDK。现在我们决定从 Node 访问 C++ 代码。经过数小时的痛苦后,我能够运行此 c++ 代码,它恰好是一个控制台应用程序,它将在控制台中打印扫描的文档数据并将扫描的文档保存在特定位置。现在的要求是,无论设备使用 c++ 代码做什么,我们都需要从 Node 执行它,除了在控制台中打印它之外,我们必须在使用 Angular 开发的 Web 应用程序中显示它。我在互联网上找到的解决方案很少,比如 NAPI 和 C++ Addon by Node,SWIG 用于创建 package 类。我在这里对如何进行感到有点困惑,因为我不知道上述两种建议的方法将如何工作,甚至对于上述要求是否可行。我还想利用设备制造商提供的 SDK,因为它拥有设备的所有/大部分功能。

总结以上冗长的要求:

  • 我有一个与设备通信的 C++ SDK,我想使用它 从 node.js 访问此 c++ 代码,我该如何继续?如果 我将采用上述任何一种方式,是否需要 重写 c++ 代码以从 node.js 访问

  • c++ SDK provided by the device manufacturer , 如果你想拥有 看看。它有c++、csharp、java,但我们可以专注于c++

上述链接中的所有代码均受设备制造商的版权保护。我对此不持有任何主张

最佳答案

对于 C++ 接口(interface),您将为 Node 创建一个 C++ 插件。该插件会将函数作为模块公开给 Node ,例如 const myCppApi = require('bindings)('yourNativeAddonName') 不同之处在于模块背后的代码不是 javascript 而是进行调用的 native package 器编译代码。或者换句话说,您可以在哪里使用条形扫描仪的 C++ API。

可以在 node.js API 文档中找到这方面的示例 https://nodejs.org/api/addons.html

为了您的目的,我建议您使用 N-API 并忽略其他方法,因为 N-API 不依赖于您对 v8 了解太多(v8:: 命名空间,Isolates , 上下文等)以及 chromium 的工作原理。相反,一切都被简化了。

您可以查看此示例存储库以了解如何使用 N-API https://github.com/nodejs/abi-stable-node-addon-examples/tree/master/1_hello_world/napi

有用的提示: 由于我看到您正在使用 Electron ,因此请确保针对与您的 Electron 正在使用的 Node 版本相同的 Node 版本构建您的模块。您可以通过在主进程中打印 process.version 或在 Electron 页面上查找它们来检查它们。

关于c++ - 从 Node JS 访问用 C++ 编写的设备 SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53762091/

相关文章:

mongodb - 在 Node.js 中执行 MongoDB 查询

.net - Azure Functions 在 bin 内创建另一个 bin 文件夹

c++ - 我在 DLL 项目 C++ 中收到 "nonstatic member reference must be relative to specific object"错误

C++ 访问冲突写入 mql4 中的 dll 中的 0x00000000

c++ - 如何在不抽取 WM_PAINT 的情况下在 STA 中抽取 COM 消息?

c++ - 无法理解是否在 #define 中

c++ - 使用父函数(继承 c++)

ios - Nodejs - 如何使用 socket.io 获取 url 参数?

c++ - 可能从单个方法返回不同类型的对象

Node.js/Nowjs - 移动 Sprite 并跟踪服务器端时间