Verwenden Run-Time dynamischen Verknüpfung

Sie können dieselbe DLL sowohl in der Ladezeit als auch in der Laufzeit dynamischen Verknüpfung verwenden. Im folgenden Beispiel wird die LoadLibrary-Funktion verwendet, um ein Handle für die Myputs-DLL abzurufen (siehe Erstellen einer einfachen Dynamic-Link-Bibliothek). Wenn LoadLibrary erfolgreich ist, verwendet das Programm das zurückgegebene Handle in der GetProcAddress-Funktion , um die Adresse der myPuts-Funktion der DLL abzurufen. Nach dem Aufrufen der DLL-Funktion ruft das Programm die FreeLibrary-Funktion auf, um die DLL zu entladen.

Da das Programm dynamische Laufzeitverknüpfung verwendet, ist es nicht erforderlich, das Modul mit einer Importbibliothek für die DLL zu verknüpfen.

In diesem Beispiel wird ein wichtiger Unterschied zwischen dynamischer Verknüpfung mit Laufzeit und Ladezeit veranschaulicht. Wenn die DLL nicht verfügbar ist, muss die Anwendung, die die dynamische Verknüpfung der Ladezeit verwendet, einfach beendet werden. Das Beispiel für dynamische Laufzeitverknüpfung kann jedoch auf den Fehler reagieren.

// 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;

}

Dynamische Laufzeitverknüpfung