您可以在加载时间和运行时动态链接中使用相同的DLL。以下源代码产生与上一节中的加载时间示例相同的输出。该程序使用LoadLibrary函数来获取MYPUTS.DLL的句柄。如果LoadLibrary成功,程序将使用GetProcAddress函数中的返回句柄来获取DLL的myPuts函数的地址。调用DLL函数后,程序调用{??989796015}函数来卸载DLL。
以下示例说明了运行时和动态链接之间的重要区别。如果MYPUTS.DLL文件不可用,则使用加载时动态连接的应用程序将终止。然而,运行时动态链接示例可以响应错误。
//文件:RUNTIME.C
//一个使用LoadLibrary和的简单程序
// GetProcAddress从MYPUTS.DLL访问myPuts。
#include < stdio.h >
#include < windows.h >
typedef VOID (*MYPROC)(LPTSTR);
VOID主(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
//获取DLL模块的句柄。
hinstLib = LoadLibrary("myputs");
//如果句柄有效,请尝试获取函数地址。
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts");
//如果函数地址有效,请调用该函数。
if (fRunTimeLinkSuccess = (ProcAdd != NULL))
(ProcAdd) ("message via DLL function\n");
//释放DLL模块。
fFreeResult = FreeLibrary(hinstLib);
}
//如果无法调用DLL函数,请使用其他方法。
低(!fRunTimeLinkSuccess)
printf("message via alternative method\n");
}
因为程序使用运行时动态链接,所以在创建程序模块时不应链接到导入库。