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..