Sdílet prostřednictvím


GetProcAddress

Procesy explicitně propojení volání knihovny DLL GetProcAddress získat adresu exportovaná funkce v knihovně DLL.Pomocí funkce Vrácený ukazatel volání funkce knihovny DLL.GetProcAddress kladu popisovače modulu DLL (buď vrácené LoadLibrary, AfxLoadLibrary, nebo GetModuleHandle) a převezme název funkce, kterou chcete volání nebo funkce exportu pořadové číslo.

Protože při volání funkce knihovny DLL prostřednictvím ukazatele a neexistuje žádná kontrola typu v čase kompilace, zkontrolujte parametry funkce správnost tak, že není overstep paměti přidělené v zásobníku a způsobit narušení přístupu.Jedním způsobem, jak zajistit bezpečnost typů je prohlédnout prototypy funkce exportovaných funkcí a vytvoření odpovídající funkce TypeDef ukazatele funkce.Příklad:

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 lze určit při volání funkce GetProcAddress závisí na způsob, jakým byla vytvořena knihovna DLL.

Řadové exportu můžete získat je sestaven soubor definice (DEF.) modulu DLL jsou propojení a funkce jsou uvedeny anglické řadové číslovky vývoz část souboru DEF. na knihovnu DLL.Volání GetProcAddress s vývozní řadové jako protiklad k název funkce je poněkud rychlejší DLL má mnoho exportovaných funkcí, protože export řadové číslovky sloužit jako indexy do na knihovnu DLL exportovat tabulku.Exportu řadové s GetProcAddress lze najít funkci přímo jako protiklad k porovnání zadaný název funkce názvy tabulky exportu na knihovnu DLL.Však by měl zavolat GetProcAddress se vývoz řadové pouze v případě, že máte kontrolu přiřazení řadové číslovky exportovaných funkcí v souboru DEF..

Co chcete udělat?

Co chcete vědět více?

Viz také

Koncepty

Knihovny DLL jazyka Visual C++