我正在尝试解决在执行GetLastError()
时收到CallWindowProc
的错误。代码如下:
static LRESULT CALLBACK editSubProc(HWND h, UINT m, WPARAM w, LPARAM l)
{
//some implementation
//GetLastError() returns 0 here
CallWindowProc(edit_proc,h,m,w,l);
}
窗口的创建如下所示:HWND ch=CreateWindowEx(style,"Edit","",dwstyle,l,t,r-l,b-t,hwnd,0,hInst,0);
edit_proc=(WNDPROC)GetWindowLongPtr(ch,GWLP_WNDPROC);
SetWindowLongPtr(ch,GWLP_WNDPROC,(LONG_PTR)editSubProc);
现在,场景是,主循环调用IsDialogMessage(...)
,后者调用editSubProc
,后者通过CallWindowProc
再次调用editSubProc
。在editSubProc
的第二次调用开始时,GetLastError
返回5。一切都从同一线程调用。这种行为的原因可能是什么?
最佳答案
GetLastError()
返回发生的最后一个错误(它甚至用名称表示!)。
因此,最后发生的错误是“访问被拒绝”。
什么时候发生的?没有线索。它应该发生吗?不知道。这是个问题吗?可能不会。有很多原因可能会导致拒绝访问某些内容,也许Windows OS的某些部分只是想查看它是否有权访问某些内容。
出现错误时应调用GetLastError
,并且文档告诉您调用它来获取错误代码。否则,您只会得到最后发生的错误,这可能是程序的完全不同的部分,也许是应该存在错误的地方。您正在弥补想象中的问题,而这些问题都不存在。
关于c++ - CallWindowProc()生成错误5(访问被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64444130/