javascript - 将二进制组件引用到 js-ctypes

标签 javascript firefox-addon packaging jsctypes

我已经在我的 chrome.manifest 中注册了一个二进制组件:

binary-component components/linux/myLib.so abi=Linux_x86-gcc3

现在我想将其路径传递给 ctypes.open()。我的问题是:如何引用二进制组件以便将其传递给 ctypes.open()

最佳答案

chrome.manifest 中列出的二进制组件应该是 XPCOM 组件。另一方面,你的是一个常规库,不需要在 list 中列出它——它是一种非常“手动”的方法。您的代码需要检查 nsIXULRuntime.XPCOMABI(参见 https://developer.mozilla.org/En/NsIXULRuntime)以查看平台是否兼容。然后你需要得到你的库文件的位置,像这样:

Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("myAddon@foo.com", function(addon)
{
    var uri = addon.getResourceURI("components/linux/myLib.so");
    if (uri instanceof Components.interfaces.nsIFileURL)
    {
        ctypes.open(uri.file.path);
        ...
    }
});

当然,getAddonByID() 的第一个参数需要替换为您的附加组件的 ID。此处假设您的附加组件已解压安装(在 install.rdf 中指定为 <em:unpack>true</em:unpack>),否则磁盘上将没有要加载的文件。

关于javascript - 将二进制组件引用到 js-ctypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6175608/

相关文章:

cmake - 如何使用CPack将文件添加到Debian软件包中?

binary - Maxmind 的二进制 DAT 是如何工作的?

javascript - &lt;script async > 与 document.getElementsByTagName ('script' )[0].insertBefore 等?

javascript - 检查是否启用了 Firefox 3.5 附加组件

linux - Fedora 下 Firefox 未加载 XPCOM 组件

firefox - Firefox 扩展中 setTimeout 的竞争条件?

python - Google App-Engine 为自己的 Python 应用程序运行 setup.py install

javascript - 如何在 React JS 中处理 JSX 内的 Promise?

javascript - 如何将字符发送到 USB 端口?

javascript - webapp 中可能的内存泄漏