Collegamento esplicito
Con il collegamento esplicito, le applicazioni devono effettuare una chiamata di funzione per caricare in modo esplicito la DLL in fase di esecuzione. Per collegarsi a una DLL in modo esplicito, un'applicazione deve procedere come descritto di seguito.
Chiamare LoadLibrary o una funzione analoga per caricare la DLL e ottenere un handle di modulo.
Chiamare GetProcAddress per ottenere un puntatore per ciascuna funzione esportata che l'applicazione intende chiamare. Poiché le applicazioni chiamano le funzioni della DLL tramite un puntatore, il compilatore non genera riferimenti esterni evitando di dover effettuare il collegamento con una libreria di importazione.
Chiamare FreeLibrary dopo avere terminato le operazioni relative alla DLL.
Di seguito è riportato un esempio:
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
...
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}