使用Run-Time动态链接
可以在加载时和运行时动态链接中使用相同的 DLL。 以下示例使用 LoadLibrary 函数获取 Myputs DLL 的句柄 (请参阅 创建简单Dynamic-Link库) 。 如果 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;
}
相关主题