我正在用Delphi構建一個插件系統(你們中的一些人一直在幫我完成這個任務)。德爾福:奇怪的行爲加載DLL與LoadLibrary
要搜索DLL文件,我使用了一個TSearchRec,它在DLL文件的exe路徑中進行搜索,然後我使用LoadLibrary來訪問它們。 然後,如果某個函數被暴露(使用GetProcAddress),我將它作爲插件加載。如果沒有,則執行FreeLibrary,然後繼續下一個文件。
在測試時,我注意到當TSearchRec發現了「borlndmm.dll」,碰巧在那個路徑中,它加載並搜索我的插件函數,當然找不到,但是當執行if FreeLibrary,我得到一個訪問衝突。
其他沒有插件的DLL位於相同的路徑,如libmariadb.dll,安全地釋放沒有錯誤。
當然這很容易解決,通過讓我的插件dll在它自己的路徑中,沒有任何其他的dll文件,即使出於性能的原因,它會更好,因爲它不需要加載任何不是它不應該至。
但我想明白爲什麼會發生。 任何想法?
謝謝 努諾·皮卡
請勿將隨機DLLS加載到您的過程中。真是個壞主意。 –
如果您創建了一個測試應用程序,它除了在'borlndmm.dll'上調用'LoadLibrary',然後調用'FreeLibrary',還會發生什麼?如果是這樣,請張貼使用的代碼。如果沒有,這是一個問題孤立您的應用程序本身。 (我同意@DavidHeffernan,順便說一句,將隨機DLL加載到你的過程中是一個可怕的主意。) –
謝謝大衛和肯。 我會遵循這個建議! – nunopicado