如何使用c/c++库与Javascript

How to use c/c++ library with Javascript?

本文关键字:库与 Javascript c++ 何使用      更新时间:2023-10-16

我有一个第三方SDK。我没有源代码,只有头文件,dll和lib文件。该SDK提供了C api,可以通过USB与设备通信。我想在Javascript中使用这个SDK。

我已经搜索了这个话题,有一些方法。然而,根据我的理解,他们每个人都有一些困难,以便容易地应用到我的情况:

  1. emscripten -要求所有源代码被编译成位码,而我没有它也有限制,什么c++代码可以成功解析。
  2. SWIG -有一些非琐碎的已知问题。例如,long不支持,Javascript回调也不支持我不明白这个,这是否意味着js调用c/c++库的代码不能使用回调函数?)
  3. Node yp -似乎你必须熟悉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,你仍然可以。只要让你的应用成为HTML元素的包装器,你就可以用它来编写GUI。这样,GUI是HTML,但应用程序的其余部分可以本地与你的。dll对话。这将给你和你的用户一个良好的体验。

如果你把浏览器带进来,你只会得到痛苦。所有的浏览器都在积极地使你想要的东西变得不可能。对于浏览器制造商来说,加载本地代码只会带来安全、稳定性和兼容性问题。

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