无法在firefox插件中使用ctypes.open打开库(错误126)

时间:2015-10-20 08:45:34

标签: c firefox dll firefox-addon jsctypes

开发Firefox插件,使用ctypes加载自定义DLL - 在我的真实计算机上(win 7/64),DLL加载顺利,但在使用相同操作系统的测试VM中,发生以下错误:

console.error: bzaddon:
  Message: Error: couldn't open library .\BZAddOnHelper.dll: error 126
  Stack:
    @resource://bzaddon/index.js:25:11
run@resource://gre/modules/commonjs/sdk/addon/runner.js:145:19
startup/</<@resource://gre/modules/commonjs/sdk/addon/runner.js:86:7
Handler.prototype.process@resource://gre/modules/Promise-backend.js:867:23
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise-backend.js:746:7
this.PromiseWalker.scheduleWalkerLoop/<@resource://gre/modules/Promise-backend.j
s:688:37

加载库的代码:

// Get the chrome components
let { Ci, Cu, Cr } = require('chrome');
// Get ctypes
Cu.import("resource://gre/modules/ctypes.jsm");
// External DLL
var lib = ctypes.open(".\\BZAddonHelper.dll");

我甚至尝试过一个完全空的DLL,它不依赖于msvc *:

screenshot of 'depends' on the target vm

我尝试使用将DLL移动到数据目录并使用self.data.url并且根本不使用任何路径。我尝试使用完整的路径。唯一有效的是将我的DLL复制到SysWow64(DLL是32位,因为firefox是32位)。再一次,在MY(dev)机器上运行它可以使用&#34;。\ dllname&#34; - 但不是在任何其他计算机上......我完全失去了......任何人?

1 个答案:

答案 0 :(得分:1)

你不应该安装到system32,看看这个使用自定义DLL的工作插件:github.com/NoitForks/Firefox_addon_sdk_jsctypes和这一个:github.com/NoitForks/fx-sapi-test我确定你的错误是你是不使用使用file://协议的字符串。如果它在C:\ blah.dll上执行ctypes.open(&#39; file:// C:/blah.dll')