Udostępnij za pośrednictwem


GetProcAddress

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.

Co chcesz zrobić?

Co chcesz wiedzieć więcej?

Zobacz też

Koncepcje

Biblioteki DLL w programie Visual C++