使用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;

}

运行时动态链接