2011-01-30 60 views
1

我加載使用此方法的COM DLL:處理對象時應該釋放一個加載的模塊嗎?

[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] 
private extern static IntPtr LoadLibrary(string librayName); 

我應該釋放使用DLL:

[DllImport("kernel32", SetLastError = true)] 
private static extern bool FreeLibrary(IntPtr hModule); 

或只是讓應用程序終止處理呢?

回答

4

當您完成使用使用LoadLibrary加載的DLL時,應該調用FreeLibrary。這不會是一個問題,除非你的應用程序長時間運行並且你加載了很多這些DLL,或者除非你想更新磁盤上的DLL(只要它被加載它就會被鎖定)。

順便說一句,爲什麼你使用LoadLibrary加載COM DLL,而不是使用TLBIMP來創建一個.NET可訪問的包裝?

+0

+1爲了進一步澄清,只*釋放使用LoadLibrary加載的DLL。您不應該釋放像「system32」,「kernel32」等任何系統DLL,*或任何您使用`GetModuleHandle`獲得的句柄的DLL。有關詳細信息,請參閱[文檔](http://msdn.microsoft.com/zh-cn/library/ms683152.aspx)。 – 2011-01-30 12:07:17

相關問題