DLLによって異なります。基本的に、次のオプションがあります。
- そのDLLのLIBに対してリンクして、自動的にロードします
- ライブラリのロード時に他のDLLをロードし、アンロードする前にアンロードします
- 使用する前に他のDLLをロードしてから、アンロードします
1を選択すると、「DLL1のロードに失敗しました」などのDLL1をロードしようとしたときにDLL2が見つからない場合、非常に奇妙なメッセージが表示されます。そして、顧客はそれがDLL2の欠落によるものであることを決して知りません。したがって、DLL2が正しくインストールされているかどうかを100%確信できない場合は、このソリューションを使用するのは好きではありません。
ただし、DLL2を手動でロードする場合(LoadLibrary)、意味のあるメッセージを表示する機会があります。
DLLに明確な開始点と終了点がある場合は、2を選択できます。これは、DLLが1つまたはごく少数の関数、つまり他のオブジェクトのファクトリを作成する関数をエクスポートする場合に当てはまります。その後、ファクトリでロード/アンロードできます。
このロード/アンロードを頻繁に実行しない場合は、3を選択できます。
さらに、DLL2へのハンドルを1つだけ保持する必要はありません。LoadLibrary / FreeLibraryは複数回呼び出すことができ、参照カウントを行うのはフレームワークです。
したがって、状況が許す限り、これら3つのソリューションのいずれかを選択できます。元のソリューションを使用する必要があるのは、明確なエントリポイントがなく、DLL2を必要とする関数を頻繁に呼び出す場合のみです。