Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Możesz użyć tej samej biblioteki DLL zarówno w czasie ładowania, jak i w przypadku łączenia dynamicznego w czasie wykonywania. W poniższym przykładzie użyto funkcji LoadLibrary, aby uzyskać dojście do biblioteki DLL Myputs (zobacz Creating a Simple Dynamic-Link Library). Jeśli loadLibrary powiedzie się, program używa zwróconego dojścia w funkcji GetProcAddress, aby uzyskać adres funkcji myPuts biblioteki DLL. Po wywołaniu funkcji DLL program wywołuje funkcję FreeLibrary, aby zwolnić bibliotekę DLL.
Ponieważ program korzysta z dynamicznego łączenia w czasie wykonywania, nie jest konieczne łączenie modułu z biblioteką importową dla biblioteki DLL.
W tym przykładzie przedstawiono ważną różnicę między czasem wykonywania i łączeniem dynamicznym w czasie ładowania. Jeśli biblioteka DLL jest niedostępna, aplikacja korzystająca z linków dynamicznych w czasie ładowania musi po prostu zakończyć działanie. Przykład łączenia dynamicznego w czasie wykonywania może jednak zareagować na błąd.
// 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;
}
Tematy pokrewne
-
Run-Time łączenie dynamiczne