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