簡體   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