Visual Studio でアプリケーションの依存関係を管理する必要があります。アプリケーションは、Windows 7 などの特定のバージョンの Windows でのみ DLL にリンクします。その他の環境では、DLL をロードしないでください。このトピックは私にとってまったく新しいものであり、この特定の問題に関する適切な参照がオンラインにないため、DLL Delay Loading を使用してそれを達成するにはどうすればよいでしょうか。
よろしく
Visual Studio でアプリケーションの依存関係を管理する必要があります。アプリケーションは、Windows 7 などの特定のバージョンの Windows でのみ DLL にリンクします。その他の環境では、DLL をロードしないでください。このトピックは私にとってまったく新しいものであり、この特定の問題に関する適切な参照がオンラインにないため、DLL Delay Loading を使用してそれを達成するにはどうすればよいでしょうか。
よろしく
プロジェクトは、Linker/Input/Delay Loaded DLLs フィールドで指定することにより、依存する dll を必要に応じてロードするように指定できます。この設定は、ビルド構成ごとに異なる場合があります。
MSDN にはかなり適切な説明があります ここ。
基本的に、問題の DLL を遅延ロード セクションに設定します。その DLL 内にある関数を呼び出すまで、その DLL は読み込まれません。
上記のリンクから:
Visual C++ リンカーは、DLL の遅延ロードをサポートするようになりました。これにより、Windows SDK 関数 LoadLibrary および GetProcAddress を使用して DLL 遅延読み込みを実装する必要がなくなります。
Visual C++ 6.0 より前は、実行時に DLL をロードする唯一の方法は、LoadLibrary と GetProcAddress を使用することでした。オペレーティング システムは、DLL を使用する実行可能ファイルまたは DLL が読み込まれると、DLL を読み込みます。
Visual C++ 6.0 以降、DLL と静的にリンクする場合、プログラムがその DLL 内の関数を呼び出すまで DLL の読み込みを遅延させるオプションがリンカーに用意されています。
アプリケーションは、/DELAYLOAD (Delay Load Import)リンカー オプションとヘルパー関数 (Visual C++ によって提供される既定の実装) を使用して、DLL の読み込みを遅らせることができます。ヘルパー関数は、LoadLibrary と GetProcAddress を呼び出すことによって、実行時に DLL をロードします。
次の場合は、DLL のロードを遅らせることを検討する必要があります。
プログラムが DLL 内の関数を呼び出さない場合があります。
DLL 内の関数は、プログラムの実行の後半まで呼び出されない場合があります。
DLL の遅延読み込みは、.EXE または .DLL プロジェクトのビルド中に指定できます。1 つまたは複数の DLL の読み込みを遅らせる .DLL プロジェクト自体が、Dllmain で遅延読み込みエントリ ポイントを呼び出すことはできません。
遅延読み込みを使用する代わりに、および で動的 読み込みを使用することを検討しましたか? これはおそらく使いやすいです。LoadLibraryGetProcAddress
typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
// Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
PGNSI pGNSI;
SYSTEM_INFO si;
ZeroMemory(&si, sizeof(SYSTEM_INFO));
pGNSI = (PGNSI) GetProcAddress(
   GetModuleHandle(TEXT("kernel32.dll")), 
   "GetNativeSystemInfo");
if(NULL != pGNSI)
   pGNSI(&si);
else GetSystemInfo(&si);