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

C++ CallWindowProc()生成错误5(访问被拒绝),c++,windows,winapi,error-handling,C++,Windows,Winapi,Error Handling,我正在尝试解决执行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=CreateWindow

我正在尝试解决执行
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(…)
,它调用
editsuboc
,它通过
CallWindowProc
,再次调用
editsuboc
。在第二次调用
editsuboc
时,
GetLastError
返回5。 所有内容都是从同一个线程调用的。这种行为的原因可能是什么?

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

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

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


当您收到错误时,应该调用
GetLastError
,文档会告诉您调用它以获取错误代码。否则你只会得到最后发生的错误,这可能是程序的一个完全不同的部分,可能是应该有错误的地方。你在虚构一些不存在的问题。

这个api没有设置最后一个错误,也没有意义调用
GetLastError
,这意味着一些函数被“拒绝访问”。哪个功能?谁在乎呢?它可以是整个程序或Windows操作系统中的任何函数。这是非常无用的信息。如果我错了,请纠正我,但由于执行
CallWindowProc
之前的错误为0,执行之后/期间的错误为5,这意味着有什么东西设置了它。目前,您的代码看起来不会编译。您的
editsuboc
返回什么值?如果它返回错误的值,它可能会被递归调用,永远。可能尝试
返回CallWindowProc(编辑程序,h,m,w,l)相反?
GetLastError()
的结果只有在调用一个有文档记录的函数进行设置之后才有意义,然后(通常)只有当该函数通过其他方式(如返回值)报告一个一般错误时才有意义。在所有其他情况下,你无法从中分辨出任何东西。