1
如果我嘗試使用LoadLibrary加載User32.dll中的函數返回錯誤14007(ERROR_SXS_KEY_NOT_FOUND)。這是我使用的代碼:調用LoadLibrary( 'user32.dll中')返回14007
SetLastError(0); //To make sure there are no previous errors.
HINSTANCE hUserModule = LoadLibrary(L"User32.dll");
if (hUserModule == NULL) { //Checking if hUserModule is NULL
MessageBoxA(NULL, "Fatal error", "", 16);
ExitProcess(0);
} //hUserModule is not NULL
printf("%d\n", GetLastError()); //14007
DWORD paMessageBoxA = (DWORD)GetProcAddress(hUserModule, "MessageBoxA");
__MessageBoxA MsgBox = (__MessageBoxA)paMessageBoxA; //typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT);
MsgBox(NULL, "", "", 64); //Application crahses
所以hUserModule不是NULL,但也是無效的。爲什麼是這樣?
編輯:的GetModuleHandle也不起作用
一般來說,你應該檢查錯誤代碼(由'GetLastError'返回)*僅*如果一個函數失敗。否則,你可能會得到誤報。 –
至於你的崩潰,你是否檢查'GetProcAddress'沒有失敗? –
最後,與您的問題完全無關,但沒有以雙下劃線開頭的自己的符號。這些由所有範圍內的「實現」(編譯器和標準庫)保留。 [見這個老問題及其答案]以獲取更多信息(http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier)。 –