DLL から関数を動的にロードする
質問:
LoadLibrary ハンドルはどのように使用できますかで定義された関数にアクセスするにはDLL?
LoadLibrary は DLL をメモリにロードしますが、その関数は自動的にインポートされません。これには 2 番目の WinAPI 関数が必要です: GetProcAddress.
例:
#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; }
Dll Export:
関数を確認してください__declspec(dllexport) を使用して DLL から正しくエクスポートされ、 __stdcall 属性:
int __declspec(dllexport) __stdcall funci() { // ... }
以上がLoadLibrary と GetProcAddress を使用して DLL 関数にアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。