將Windows 10更新到Fall Creators更新後,我在CreateWindowEx
中遇到間歇性故障。 GetLastError
返回0x000003e6 - ERROR_NOACCESS /無效訪問內存。通常(雖然不總是),只需用完全相同的參數重複呼叫即可成功。爲什麼CreateWindowEx在Fall Creators Update(錯誤998/0x3e6)中間歇性失敗?
hwnd = ::CreateWindowEx(0, wndClassName, NULL, WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, r.left, r.top, r.right, r.bottom, hParent, NULL, AfxGetInstanceHandle(), NULL);
wndClassName
與此調用註冊的wndClass
名稱:
LPCSTR wndClassName = /* clsName passed in */;
WNDCLASS wndcls;
HINSTANCE hInst = AfxGetInstanceHandle();
if (!(::GetClassInfo(hInst, wndClassName, &wndcls)))
{
ZeroMemory(&wndcls, sizeof(wndcls));
wndcls.lpfnWndProc = ::DefWindowProc;
wndcls.hCursor = ::LoadCursor(nullptr, IDC_ARROW);
wndcls.hInstance = hInst;
wndcls.lpszClassName = wndClassName;
wndcls.hbrBackground = (HBRUSH)::GetStockObject(NULL_BRUSH);
AfxRegisterClass(&wndcls);
}
MSDN文檔指出的失敗的典型原因之一就是
已安裝WH_CBT掛鉤,並返回一個失敗代碼
我的應用程序確實使用MFC,我相信MFC依賴於CBT鉤子。
有關如何調查和解決這些持續的間歇性故障的任何想法,這些故障始於Fall Creators Update?
需要調試代碼。只有這樣。我不認爲CBT在這裏扮演角色。錯誤代碼對自己說 - 你嘗試訪問或無效的地址或窗口過程中的錯誤對齊數據。需要看它是否被稱爲,如果是的話 - 它獲得了哪些消息。 – RbMm
@RbMm窗口過程是DefWindowProc--添加窗口類的註冊調用問題。 –
並且你沒有改變它('DefWindowProc')以後擁有?自定義窗口類與'DefWindowProc'有什麼意義?無論如何,錯誤是爲了自我。看起來像你有'STATUS_DATATYPE_MISALIGNMENT'或者可能(直到'STATUS_ACCESS_VIOLATION'之前說的可能性更小) – RbMm