[英]CallWindowProc() generates error 5 (Access is denied)
我正在尝试解决在CallWindowProc
执行期间使用GetLastError()
遇到的错误。 代码如下:
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 操作系统的某些部分只是想看看它是否可以访问某些内容。
您应该在收到错误时调用GetLastError
并且文档告诉您调用它来获取错误代码。 否则你只会得到最后发生的错误,这可能是程序的一个完全不同的部分,也许是应该出现错误的地方。 你在编造假想的问题,而这些问题根本不存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.