使用运行时动态链接

【勇芳软件工作室】汉化HomePreviousNext

您可以在加载时间和运行时动态链接中使用相同的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");

}

因为程序使用运行时动态链接,所以在创建程序模块时不应链接到导入库。