我在chrome.manifest
註冊的二進制組件:參考二進制組件JS-ctypes的
binary-component components/linux/myLib.so abi=Linux_x86-gcc3
現在,我想它的路徑傳遞給ctypes.open()
。我的問題是:如何引用二進制組件,以便我可以將它傳遞給ctypes.open()
?
我在chrome.manifest
註冊的二進制組件:參考二進制組件JS-ctypes的
binary-component components/linux/myLib.so abi=Linux_x86-gcc3
現在,我想它的路徑傳遞給ctypes.open()
。我的問題是:如何引用二進制組件,以便我可以將它傳遞給ctypes.open()
?
chrome.manifest中列出的二進制組件應該是XPCOM組件。另一方面,你是一個普通的圖書館,不需要在清單中列出它 - 而是一種非常「手動」的方法。您的代碼需要檢查nsIXULRuntime.XPCOMABI(請參閱https://developer.mozilla.org/En/NsIXULRuntime)以查看平臺是否兼容。然後,你需要讓你的庫文件的位置,這樣的事情:需要由您的附加課程的ID被替換
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("[email protected]", function(addon)
{
var uri = addon.getResourceURI("components/linux/myLib.so");
if (uri instanceof Components.interfaces.nsIFileURL)
{
ctypes.open(uri.file.path);
...
}
});
的第一個參數getAddonByID()。此處的假設是,您的加載項已解壓縮安裝(在install.rdf中指定的<em:unpack>true</em:unpack>
),否則將無法加載磁盤上的文件。
你可以使用「資源」來引用正常的二進制文件在你的插件: 添加到您的清單:
resource YOUR-ADDON-LIB path/to/libaddon.so ABI=Linux_x86-gcc3
resource YOUR-ADDON-LIB path/to/addon.dll ABI=WINNT_x86-msvc
的「ABI」指令會給出不同的平臺下,你的右手庫路徑。
在你的JavaScript文件,您可以參考這樣的lib路徑:
const ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var uri = ioService.newURI('resource://YOUR-ADDON-LIB', null, null);
if (uri instanceof Components.interfaces.nsIFileURL)
{
var lib = ctypes.open(uri.file.path);
/// ...
}