Chargement dynamique de fonctions à partir de DLL
Question :
Comment le handle LoadLibrary peut-il être utilisé accéder aux fonctions définies dans une DLL ?
LoadLibrary charge un DLL en mémoire mais n'importe pas automatiquement ses fonctions. Cela nécessite une deuxième fonction WinAPI : GetProcAddress.
Exemple :
#include <windows.h> #include <iostream> typedef int (__stdcall *f_funci)(); int main() { HINSTANCE hGetProcIDDLL = LoadLibrary("C:\Documents and Settings\User\Desktop\test.dll"); if (!hGetProcIDDLL) { std::cout << "could not load the dynamic library" << std::endl; return EXIT_FAILURE; } // Resolve function address using GetProcAddress f_funci funci = (f_funci) GetProcAddress(hGetProcIDDLL, "funci"); if (!funci) { std::cout << "could not locate the function" << std::endl; return EXIT_FAILURE; } std::cout << "funci() returned " << funci() << std::endl; // Free the library handle when no longer needed FreeLibrary(hGetProcIDDLL); return EXIT_SUCCESS; }
Export Dll :
Assurer la fonction est correctement exporté depuis la DLL à l'aide de __declspec(dllexport) et __stdcall attributs :
int __declspec(dllexport) __stdcall funci() { // ... }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!