Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
181 views
in Technique[技术] by (71.8m points)

javascript - Reference a binary-component to js-ctypes

I have registered a binary component in my chrome.manifest:

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

Now I want to pass its path to ctypes.open(). My question is: how do I reference the binary component so I can pass it to ctypes.open()?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The binary components listed in chrome.manifest should be XPCOM components. Yours on the other hand is a regular library, no need to list it in the manifest - it is a very "manual" approach instead. Your code needs to check nsIXULRuntime.XPCOMABI (see https://developer.mozilla.org/En/NsIXULRuntime) to see whether the platform is compatible. Then you need to get the location of your library file, something like this:

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);
        ...
    }
});

The first parameter to getAddonByID() needs to be replaced by the ID of your add-on of course. And the assumption here is that your add-on is installed unpacked (<em:unpack>true</em:unpack> specified in install.rdf) because otherwise there won't be a file on disk to be loaded.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...