【发布时间】:2015-09-17 03:49:38
【问题描述】:
我有一个来自第三方的 SDK。我没有源代码,只有头文件、dll 和 lib 文件。此 SDK 提供 C API 以通过 USB 与设备进行通信。我想在 Javascript 中使用这个 SDK。
我已经搜索过这个主题并且有几种方法。但是,根据我的理解,它们中的每一个都有一些困难可以很容易地应用于我的情况:
- emscripten - 要求将所有源代码编译成位码, 我没有。并且它对可以成功解析的 c++ 代码也有限制。
- SWIG - 有一些非平凡的已知问题。 例如,不支持 long long,不支持 Javascript 回调 支持(这个我不明白,这是否意味着js 调用c/c++ lib的代码不能使用回调函数?)
- Node gyp - 看来你必须熟悉 V8 源代码和 其他几个库,然后才能完成。
- WebIDL - 不太清楚它的用途,付出了多少努力 如果可能的话,需要让它发挥作用。
欢迎提出任何想法/建议!
编辑 1:上下文是我想将设备中的数据获取到浏览器或独立的 node-webkit 应用程序中。类似于在浏览器中获取地理位置信息的用例。 一般来说,我不认为我的问题(使用带有 JS 的 C++ 组件)是一个奇怪的想法。例如,Mozilla 用 C++ 开发了许多 XPCOM 组件,然后用 XPConnect 包装,以便这些组件可以被 Firefox 中的 Javascript 或 XUL 项目使用。但是这种方法非常耗费人力,并且对 Mozilla 的工具链产生了过多的依赖。 Node js 看起来是一个很有前途的替代方案。 Node-webkit 本质上与 XUL 做同样的事情:帮助构建/运行基于浏览器的跨平台 GUI 应用程序。
【问题讨论】:
-
可能更容易将其保留为 C++ 并使用 IPC/redis/0mq/etc 与 JS 对话。
-
SWIG 确实支持
long long。几年前我在一个 Python/C++ 项目中使用过它。如果您编写类型映射,它可以随时支持,但我相信也有原生支持。在您的情况下,回调是指调用 JS 代码的 c++ 代码。 -
上下文是什么?除了 Node,JavaScript 还意味着浏览器。在浏览器中使用 .dll 是零意义的。由于您不熟悉 Node,这意味着您没有使用它。那么为什么是 JavaScript?
-
@Adam 我添加了一些信息。关于为什么使用 js,似乎使用 GUI 开发任何应用程序的趋势,无论是否是 Web 应用程序,都是 html5+css+js
标签: javascript c++ node.js swig emscripten