2012-07-29 159 views
0

我正在开发一个NPAPI Firefox插件,我有一个问题。我需要加载第三方DLL(如D:\ mydll.dll),但在某些计算机上,mydll.dll不在系统路径或c:\ windows \ system32中,并且出现加载错误。NPAPI加载第三方DLL

下面是代码:

SetCurrentDirectory ("d:\"); 
m_hModule = LoadLibrary ("mydll.dll"); 

调用LoadLibrary返回126.我检查了Depends.exe来查看相关的模块,一切都看起来很好。我不知道问题是什么。

另一个问题是,我希望插件在Safari中工作(我的safari是版本5.17)。我将它复制到Safari的Plugins目录中,它告诉我它找不到插件。我想知道如何解决这个问题。

谢谢,请原谅我可怜的英语。

+0

我还是不明白为什么不能加载第三方DLL,为什么同一个DLL可以加载到系统路径 – 2012-07-29 17:18:09

+0

首先,我建议你一次只问一个问题;这是两个完全不同的问题。 – taxilian 2012-07-30 03:53:49

回答

2

设置当前目录不会在插件中工作,因为您不拥有该进程。你想要的命令是SetDllDirectory

SetDllDirectory("D:\"); 
m_hModule = LoadLibrary("mydll.dll"); 

当然,我不建议你是否假设一个DLL是在驱动器的根=]我会做的是把你放在同一目录中的插件DLL,然后需要的DLL您可以使用GetModuleFilename获取DLL的路径。

对于安装,而不是将插件放入firefox(或safari)目录中的插件/目录中,您应该使用install it through the windows registry。这将使它在Firefox,Chrome和Safari中可见。

您可能需要考虑使用FireBreath而不是自己实现NPAPI接口;它需要处理大部分棘手的部分,并让您可以自由地专注于插件的重要部分。

+0

我用SetEnvironmentVariable来解决第三方DLL的问题。谢谢 – 2012-07-30 07:56:46

+0

SetDllDirectory不太可能导致你的问题,但我想无论什么作品。 – taxilian 2012-07-30 15:30:35