Разработка надстройки Firefox с использованием ctypes для загрузки пользовательской DLL. На моем реальном компьютере (win 7/64) DLL загружается без заминок, но внутри моей тестовой виртуальной машины с той же ОС возникает следующая ошибка:
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*:
скриншот "зависит" от целевой виртуальной машины
Я попытался переместить DLL в каталог данных и использовать self.data.url и вообще не использовать путь. Я пытался использовать полный путь. ЕДИНСТВЕННАЯ вещь, которая работает, - это копирование моей DLL в SysWow64 (DLL 32-битная, как 32-битная Firefox). Опять же, запуск этого на МОЕЙ машине (dev) работает с ".\dllname" - но не на любом другом компьютере... Я в полной и полной растерянности... Кто-нибудь?
var lib = ctypes.open('kernel32')
. В приведенном выше сообщении темы для вашей пользовательской dll вы используете относительный путь, вы должны использовать полный путь, и это не может быть путь chrome, вы должны сделать из него файл uri. URI файлаfile://blah/blah/blah.dll
- person Noitidart   schedule 21.10.2015file://
. Если этоC:\\blah.dll
, сделайтеctypes.open('file://C:/blah.dll')
- person Noitidart   schedule 21.10.2015