2011-01-30 10 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を解放しないでください。詳細については、[documentation](http://msdn.microsoft.com/en-us/library/ms683152.aspx)を参照してください。 –

+0

私はTLBIMPを使用していますが、すべてのバージョンの展開でCOMオブジェクトの登録を処理したくありません。 – HuBeZa

+0

@HuBeZa:あなたのためにそれを世話するインストーラを使用する必要があります。それを手作業で行うことは、後ろの巨大な痛みです。しかし、セットアッププログラムは実際にはバージョン管理を難しくするのではなく、簡単にします。 –

関連する問題