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

标签 c++ windows winapi error-handling

我正在尝试解决在执行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/

相关文章:

c++ - 调试 linux 源代码时出现错误 : Exception occured while copying sources to remote machine

c++ - 在 Windows 上用 C++ 执行相当于 "Kill Process Tree"的操作

windows - 在 Windows 和 Ubuntu Emacs for PHP 中接收 Flymake 错误

windows - WiX Burn Bootstrapper - 无法检测注册表项

c++ - 如何在列表框窗口过程中捕获 VK_ESCAPE

c - 为什么 setTimer 不起作用?

c++ - 为多个显示器设置 OpenGL

c++ - 如何在opencv中找到单个图像关键点之间的欧氏距离

java - 在 Java 中创建数组(C++ 风格)

c++ - 如何让 yacc/bison 和 lex/flex 暂停文件扫描?