Firefox ctypes.js无法打开具有依赖项的dll

Firefox ctypes.js无法打开具有依赖项的dll,firefox,dll,firefox-addon,firefox-addon-sdk,jsctypes,Firefox,Dll,Firefox Addon,Firefox Addon Sdk,Jsctypes,我已将一个项目上载到Github以显示问题: 我使用ctypes.open()加载一个dll,该dll只调用打印消息的依赖dll的函数 扩展的数据文件夹中有两个DLL。还有一个可执行文件,test.exe调用扩展试图调用的同一函数,以验证它是否正常工作 要获取dll的路径,我在扩展的package.json中设置了“unpack”:true,并在index.js中调用以下命令: var dllPath = Services.io.newURI(data.url('operations.dll')

我已将一个项目上载到Github以显示问题:

我使用
ctypes.open()
加载一个dll,该dll只调用打印消息的依赖dll的函数

扩展的数据文件夹中有两个DLL。还有一个可执行文件,test.exe调用扩展试图调用的同一函数,以验证它是否正常工作

要获取dll的路径,我在扩展的package.json中设置了
“unpack”:true
,并在index.js中调用以下命令:

var dllPath = Services.io.newURI(data.url('operations.dll'), null, null).QueryInterface(Ci.nsIFileURL).file.path;`
这将返回一个路径,如

C:\Users\Eamonn\AppData\Local\Temp\1\f6ff0a5f-64b9-4953-a7a4-cb5b0a16c29c\exten‌​sions\@extension\data\operations.dll
当我手动转到该路径时,我可以看到operations.dll、supporting.dll和test.exe。运行test.exe将成功加载operations.dll,然后加载supporting.dll

但是,在路径上调用
ctypes.open()
时,返回以下错误:

console.error: ctypes-test-ext:
  Message: Error: couldn't open library C:\Users\Eamonn\AppData\Local\Temp\1\f6ff0a5f-64b9-4953-a7a4-cb5b0a16c29c\exten‌​sions\@extension\data\operations.dll: error 126

当我加载一个没有任何依赖dll的dll时,
ctypes.open()
works

你能用这个插件创建一个xpi吗。通过键入
jpm xpi
。然后用zip软件打开xpi,然后检查install.rdf。你应该看看里面的解包:是的,我想这就是发生的事情。根据自定义本机文件上的文档,您似乎做的每件事都是正确的-per sysinternals的进程监视器有助于查看哪里出了问题。也许它在另一个位置查找另一个DLL?查看process monitor,Firefox正在C:\Program Files(x86)\Mozilla Firefox\中搜索依赖的DLL,我认为这就是所发生的情况。有没有办法避免这种行为?我能想到的唯一解决方案是使用一个接受扩展路径的包装dll,然后使用
LoadLibrary()
动态加载我想要加载的实际dll。这很有趣,现在我想起来了,过去几年中我通过jsctypes使用的所有dll/so/dylib都是独立的,也不依赖别人。我将尝试查看是否发现有人在使用依赖项。目前我正在尝试创建一个包装器dll并使用
LoadLibrary
。但是,当我第一次在Firefox放置DLL的路径上调用
SetCurrentDirectory
时,我得到一个错误:
文件名、目录名或卷标语法不正确。我相信我得到了这个错误,因为指向DLL的路径包含一个@符号。这可能是根本问题吗?我该怎么解决这个问题。你能用那个插件制作一个xpi吗。通过键入
jpm xpi
。然后用zip软件打开xpi,然后检查install.rdf。你应该看看里面的解包:是的,我想这就是发生的事情。根据自定义本机文件上的文档,您似乎做的每件事都是正确的-per sysinternals的进程监视器有助于查看哪里出了问题。也许它在另一个位置查找另一个DLL?查看process monitor,Firefox正在C:\Program Files(x86)\Mozilla Firefox\中搜索依赖的DLL,我认为这就是所发生的情况。有没有办法避免这种行为?我能想到的唯一解决方案是使用一个接受扩展路径的包装dll,然后使用
LoadLibrary()
动态加载我想要加载的实际dll。这很有趣,现在我想起来了,过去几年中我通过jsctypes使用的所有dll/so/dylib都是独立的,也不依赖别人。我将尝试查看是否发现有人在使用依赖项。目前我正在尝试创建一个包装器dll并使用
LoadLibrary
。但是,当我第一次在Firefox放置DLL的路径上调用
SetCurrentDirectory
时,我得到一个错误:
文件名、目录名或卷标语法不正确。我相信我得到了这个错误,因为指向DLL的路径包含一个@符号。这可能是根本问题吗?我该怎么解决这个问题呢。