繁体   English   中英

CallWindowProc() 生成错误 5(访问被拒绝)

[英]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 在第二次调用editSubProcGetLastError返回 5。一切都从同一个线程调用。 这种行为的原因是什么?

GetLastError()返回发生的最后一个错误(它甚至在名称中这么说!)。

所以最后发生的错误是“访问被拒绝”。

什么时候发生的? 没有线索。 它应该发生吗? 不知道。 这是个问题吗? 可能不是。 某些内容的访问可能被拒绝的原因有很多,也许 Windows 操作系统的某些部分只是想看看它是否可以访问某些内容。

您应该在收到错误时调用GetLastError并且文档告诉您调用它来获取错误代码 否则你只会得到最后发生的错误,这可能是程序的一个完全不同的部分,也许是应该出现错误的地方。 你在编造假想的问题,而这些问题根本不存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM