Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Azok a folyamatok, amelyek kifejezetten a GetProcAddress hívást használják a DLL-ben lévő exportált függvény címének megszerzéséhez. A visszaadott függvénymutatóval meghívhatja a DLL-függvényt.
A GetProcAddress paraméterként veszi át a DLL-modul leíróját (amelyet a LoadLibraryAfxLoadLibrary vagy a GetModuleHandle ad vissza), és vagy a meghívni kívánt függvény nevét vagy a függvény exportálási sorszámát veszi fel.
Mivel egy mutatón keresztül hívja meg a DLL-függvényt, és nincs fordítási idő típusú ellenőrzés, győződjön meg arról, hogy a függvény paraméterei helyesek, hogy ne lépje túl a veremen lefoglalt memóriát, és ne okozzon hozzáférés-megsértést. A típusbiztonság biztosításának egyik módja, ha megnézzük az exportált függvények függvény prototípusait, és egyező típusdefiniteket hozunk létre a függvénymutatókhoz. Például:
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);
}
}
A GetProcAddress hívásához használni kívánt függvény megadása a DLL felépítésétől függ.
Az exportálási sorszámot csak akkor szerezheti be, ha a hivatkozott DLL moduldefiníciós (.def) fájllal van létrehozva, és ha az ordinálok a DLL .def fájljának EXPORT szakaszában szereplő függvényekkel vannak felsorolva. A GetProcAddress parancs meghívása a függvény nevével ellentétben kissé gyorsabb, ha a DLL számos exportált függvényt tartalmaz, mert az exportálási sorszámok indexként szolgálnak a DLL exportálási táblájában. Az exportálási sorszámmal a GetProcAddress közvetlenül megkeresheti a függvényt, nem pedig összehasonlíthatja a megadott nevet a DLL exportálási táblájának függvényneveivel. A GetProcAddress parancsot azonban csak akkor kell meghívnia egy exportálási sorszámmal, ha ön szabályozza a .def fájlban az exportált függvényekhez rendelt sorszámok kiosztását.