我已经在我的 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/