如何从 SDK 插件数据文件夹加载 DLL
how to load dll from SDK addon data folder?
我们使用 web IDE 来创建插件。我的测试.dll位于数据文件夹中。如何通过 js-ctypes 加载它?
像"c:''test.dll"这样的绝对路径没有问题,但我不能使用此路径来分发它。
var lib = ctypes.open("c:''test.dll");
// works but how i get path to addon inner data directory?
我在这里给你阻力最小的方法......还有其他方法,例如从已安装的XPI中手动解压缩DLL,但这变得过于宽泛,容易出错且复杂。
- 您需要在package.json中定义
"unpack": true
,以便在安装时解压缩XPI。 -
您需要使用
self.data.url()
和各种其他工具来找出DLL文件的实际路径。在成为文件 URI 之前,URI 可能会在"资源:"和/或"chrome:" URI 中多次包装。所以这也需要解开。const {Cc, Cu, Ci} = require("chrome"); Cu.import("resource://gre/modules/Services.jsm"); const ResProtocolHandler = Services.io.getProtocolHandler("resource"). QueryInterface(Ci.nsIResProtocolHandler); const ChromeRegistry = Cc["@mozilla.org/chrome/chrome-registry;1"]. getService(Ci.nsIChromeRegistry); function resolveToFile(uri) { switch (uri.scheme) { case "chrome": return resolveToFile(ChromeRegistry.convertChromeURL(uri)); case "resource": return resolveToFile(Services.io.newURI(ResProtocolHandler.resolveURI(uri), null, null)); case "file": return uri.QueryInterface(Ci.nsIFileURL).file; default: throw new Error("Cannot resolve"); } } const {data} = require("self"); let dll = data.url("test.dll"); dll = resolveToFile(Services.io.newURI(dll, null, null)); console.log(dll.path); // dll.path is the full, platform-dependent path for the file.
相关文章:
- 我的外部js文件无法加载
- 无法在obj+mtl文件中加载纹理
- js文件未加载js控制台say's”;不允许加载本地资源”;
- 如何在dojo应用程序构建概要文件中加载json文件
- jQuery:用文件夹中的图像填充数组.或者使用AJAX从文件夹加载图像
- 如何从一个文件夹加载所有内容
- 如何从 SDK 插件数据文件夹加载 DLL
- Android WebView:使用脚本标签从我的资产文件夹加载外部 JavaScript 文件
- AngularJS从文件夹加载控制器
- 本地网页-从文件夹加载图像
- 从e文件夹加载图像并将其显示在html中
- 想要从每个“文件夹”上的文件夹加载新图像;下一个“;点击
- 如何使用javascript从文件夹加载图像
- 如何使用AngularJS和asp.net MVC 4从视图文件夹加载模板
- 从本地文件夹加载文件
- AMP-HTML页面如何从rails/app/assets/javascript文件夹加载javascript ?
- 如何从php中的不同src文件夹加载文件
- Fabricjs:从本地文件夹加载svg
- 无法从Laravel 5中的PUBLIC文件夹加载AngularJs文件
- 从不同的文件夹加载图像