Partager via


Utilisation de Run-Time liaison dynamique

Vous pouvez utiliser la même DLL dans les liaisons dynamiques au moment du chargement et au moment de l’exécution. L’exemple suivant utilise la fonction LoadLibrary pour obtenir un handle à la DLL Myputs (voir Création d’une bibliothèque Dynamic-Link simple). Si LoadLibrary réussit, le programme utilise le handle retourné dans la fonction GetProcAddress pour obtenir l’adresse de la fonction myPuts de la DLL. Après avoir appelé la fonction DLL, le programme appelle la fonction FreeLibrary pour décharger la DLL.

Étant donné que le programme utilise la liaison dynamique au moment de l’exécution, il n’est pas nécessaire de lier le module à une bibliothèque d’importation pour la DLL.

Cet exemple illustre une différence importante entre la liaison dynamique au moment de l’exécution et la liaison dynamique au moment du chargement. Si la DLL n’est pas disponible, l’application utilisant la liaison dynamique au temps de charge doit simplement se terminer. Toutefois, l’exemple de liaison dynamique au moment de l’exécution peut répondre à l’erreur.

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

}

Liaison dynamique au moment de l’exécution