Sdílet prostřednictvím


GetProcAddress

Procesy explicitně propojení volání knihovny DLL GetProcAddress získat adresu exportovaná funkce v knihovně DLL. Ukazatel vrácený funkcí pomocí volání funkce knihovny DLL. GetProcAddress jako parametry trvá popisovače modulu DLL (vrácené buď LoadLibrary, AfxLoadLibrary, nebo GetModuleHandle) a převezme název požadovanou funkci volání nebo funkce exportu pořadové číslo.

Protože jsou volání funkce DLL prostřednictvím ukazatele a neexistuje žádná kontrola typu v čase kompilace, zkontrolujte parametry funkce správnost tak, aby 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 funkce prototypy 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 určit při volání funkce GetProcAddress závisí na způsob, jakým byla vytvořena knihovna DLL.

Export pořadové číslo lze získat vytvořených pomocí modulu (.def) definiční soubor DLL propojujete a jsou uvedeny řadové číslovky funkcí aplikace vývozy část souboru DLL DEF.. Volání GetProcAddress s vývozní řadové, nikoli na název funkce je poněkud rychlejší DLL má mnoho exportovaných funkcí, protože export řadové číslovky slouží jako indexy do na knihovnu DLL exportovat tabulku. Řadové vývozu s GetProcAddress lze nalézt funkci přímo jako protiklad k porovnání zadaný název jmen funkce export tabulky na knihovnu DLL. Však by měl zavolat GetProcAddress se exportu řadové pouze pokud 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