如何使用带有Javascript的c / c ++库?

时间:2015-09-17 03:49:39

标签: javascript c++ node.js swig emscripten

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

我正在搜索这个主题,并且有一些方法。但是,根据我的理解,他们每个人都有一些难以适应我的情况:

  1. emscripten - 要求将所有源代码编译成bitcode, 我没有。它还可以成功解析c ++代码的限制。
  2. SWIG - 有一些非常重要的已知问题。 例如,不支持long long,Javascript回调不支持 支持(我不明白这个,这是否意味着js 调用c / c ++ lib的代码不能使用回调函数?)
  3. 节点gyp - 似乎你必须熟悉V8源和 在完成任务之前,还有其他几个库。
  4. WebIDL - 不太确定它的内容,它有多少努力 如果可能的话,需要让它发挥作用。
  5. 欢迎任何想法/建议!

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

1 个答案:

答案 0 :(得分:1)

使用正确的工具完成工作。

你的应用程序无论如何都只是Windows,因此请使用过多的工具。

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

如果您带上浏览器,除了痛苦之外什么都没有。所有浏览器都在努力制作您想要的东西。加载本机代码只不过是浏览器制造商的安全性,稳定性和兼容性问题。

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