繁体   English   中英

如何在 Javascript 中使用 c/c++ 库?

[英]How to use c/c++ library with Javascript?

我有一个来自第三方的 SDK。 我没有源代码,只有头文件、dll 和 lib 文件。 此 SDK 提供 C API 以通过 USB 与设备进行通信。 我想在 Javascript 中使用这个 SDK。

我搜索过这个主题,有几种方法。 然而,根据我的理解,他们每个人都有一些困难可以很容易地应用于我的情况:

  1. emscripten - 要求将所有源代码编译为 bitcode,而我没有。 并且它对可以成功解析哪些 C++ 代码也有限制。
  2. SWIG - 有一些不重要的已知问题。 例如,不支持long long,不支持Javascript回调(这个我不明白,这是否意味着调用c/c++ lib的js代码不能使用回调函数?)
  3. Node gyp - 在完成之前,您似乎必须熟悉 V8 源代码和其他几个库。
  4. WebIDL - 如果可能的话,不太确定它是关于什么的,需要多少努力才能让它工作。

欢迎任何想法/建议!

编辑 1:上下文是我想将数据从设备获取到浏览器或独立的 node-webkit 应用程序中。 类似于在浏览器中获取地理位置信息的用例。 一般来说,我不认为我的问题(在 JS 中使用 C++ 组件)是一个奇怪的想法。 例如,Mozilla 用 C++ 开发了许多 XPCOM 组件,然后用 XPConnect 包装,以便这些组件可以被 Firefox 中的 Javascript 或 XUL 项目使用。 但是这种方法是非常劳动密集型的,并且对 Mozilla 的工具链有太多的依赖。 Node js 看起来是一个很有前途的替代方案。 Node-webkit 本质上与 XUL 做同样的事情:帮助构建/运行基于浏览器的跨平台 GUI 应用程序。

为工作使用正确的工具。

无论如何,您的应用程序将仅适用于 Windows,因此请为此使用大量工具。

如果您想在 HTML/JavaScript 中构建 GUI,您仍然可以。 只需让您的应用程序成为您在其中编写 GUI 的 HTML 元素的包装器。这样 GUI 就是 HTML,但应用程序的其余部分可以本机与您的 .dll 对话。 这将为您和您的用户提供良好的体验。

如果您将浏览器带入其中,您只会感到痛苦。 所有浏览器都在积极努力使您想要的成为不可能。 对于浏览器制造商来说,加载本机代码意味着安全性、稳定性和兼容性问题。

唯一的另一种干净的方法是将您的应用程序编写为一种 SaaS 应用程序。 即分为两部分,一个作为本地 Windows 应用程序编写的服务器组件,它加载 .dll 并提供一个 HTTP 服务器,为您的 HTML+JS GUI 组件提供服务。 这种方法是否有意义取决于您的应用程序的用途。 如果期望在一台机器上全部使用它,那么这会给您的用户增加不必要的痛苦。 如果将 .dll 加载到一台机器上然后远程访问它是有意义的,无论是在另一台计算机还是移动应用程序上,那么它可能是有意义的。 一些以这种方式工作的应用程序包括 SABnzbd、Plex 媒体服务器、传输具有这种模式、任何旨在在 NAS 上运行的应用程序等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM