Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jawne dołączanie do wywołanie biblioteki DLL procesów GetProcAddress uzyskać adres wyeksportowanej funkcji w bibliotece DLL.Wskaźnik funkcji zwracane służy do wywołania funkcji DLL.GetProcAddress przyjmuje jako parametry uchwyt modułu DLL (zwracany przez LoadLibrary, AfxLoadLibrary, lub GetModuleHandle) i pobiera nazwę funkcji do wywołania lub funkcji eksportu porządkowej.
Ponieważ są wywołanie funkcji DLL za pomocą wskaźnika, a nie istnieje żaden typ kompilacji, sprawdzanie, upewnij się, parametry funkcji są poprawne, tak aby nie overstep pamięć zaalokowana na stosie i powodować naruszenie zasad dostępu.Jednym ze sposobów zapewnienia bezpieczeństwa typu jest przyjrzeć prototypy funkcji eksportowanych funkcji i utworzyć pasujące definicje TypeDef dla wskaźników funkcji.Na przykład:
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);
}
}
Jak określić funkcji podczas wywoływania GetProcAddress zależy od tego, jaki został zbudowany biblioteki DLL.
Liczebniki eksportu można uzyskać tylko jeśli biblioteki DLL, łącząc się jest zbudowany z plik definicji (DEF) modułu i liczby porządkowe wymieniono funkcje w wywóz sekcji pliku .def biblioteki DLL.Wywołanie GetProcAddress z wywóz jest nieznacznie szybciej, jeśli biblioteka DLL ma wiele funkcji eksportowanych ponieważ porządkowe wywóz służą jako indeksy do biblioteki DLL eksportowania tabeli porządkowych, w przeciwieństwie do nazwy funkcji.Z porządkowej wywóz GetProcAddress można zlokalizować funkcji bezpośrednio w przeciwieństwie do porównywania określonej nazwy do nazwy funkcji w tabeli eksportu biblioteki DLL.Jednakże należy wywołać GetProcAddress z porządkową wywozu, tylko jeśli masz kontrolę nad Przypisywanie liczb porządkowych do eksportowanych funkcji w pliku .def.