動的リンクRun-Time使用
読み込み時と実行時の動的リンクの両方で同じ DLL を使用できます。 次の例では 、LoadLibrary 関数を使用して Myputs DLL へのハンドルを取得します ( 「Simple Dynamic-Link Library の作成」を参照)。 LoadLibrary が成功した場合、プログラムは GetProcAddress 関数で返されたハンドルを使用して DLL の myPuts 関数のアドレスを取得します。 DLL 関数を呼び出した後、プログラムは FreeLibrary 関数を呼び出して DLL をアンロードします。
プログラムは実行時の動的リンクを使用するため、モジュールを DLL のインポート ライブラリにリンクする必要はありません。
この例では、実行時と読み込み時の動的リンクの重要な違いを示します。 DLL が使用できない場合は、読み込み時間の動的リンクを使用するアプリケーションは、単に終了する必要があります。 ただし、実行時の動的リンクの例では、エラーに応答できます。
// A simple program that uses LoadLibrary and
// GetProcAddress to access myPuts from Myputs.dll.
#include <windows.h>
#include <stdio.h>
typedef int (__cdecl *MYPROC)(LPCWSTR);
int main( void )
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
// Get a handle to the DLL module.
hinstLib = LoadLibrary(TEXT("MyPuts.dll"));
// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts");
// If the function address is valid, call the function.
if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
(ProcAdd) (L"Message sent to the DLL function\n");
}
// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}
// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("Message printed from executable\n");
return 0;
}
関連トピック