明示的なリンク
明示的リンクの場合、アプリケーションは実行時に DLL を明示的に読み込むために、関数呼び出しをする必要があります。 DLL と明示的にリンクするには、アプリケーションは、以下の手順を実行します。
LoadLibrary (または、同様の関数) を呼び出して、DLL を読み込み、モジュール ハンドルを取得します。
GetProcAddress を呼び出して、アプリケーションが呼び出す各エクスポート関数への関数ポインターを取得します。 アプリケーションは、ポインターを通じて DLL の関数を呼び出すので、コンパイラは外部参照を生成しません。このため、インポート ライブラリとリンクする必要はありません。
DLL の終了時に FreeLibrary を呼び出します。
たとえば、次のようになります。
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
...
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}