2012-07-29 104 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