在我的应用程序中,我使用以下代码:
bool HandleMessages()
{
MSG msg;
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
return FALSE;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return true;
}
字符串
我以为这是windows中消息处理的标准代码,但现在当我尝试运行程序时,我总是在PeekMessage()调用时得到一个Exception。
异常消息为
testing.exe:0xC 0000005中0x 57 a10 eed(msvcr100d.dll)处的未处理异常:在位置0x 666665 c处阅读时发生访问冲突。
我完全迷失在这里,不明白为什么它会抛出异常。有人得到了提示吗?
调用堆栈:
msvcr100d.dll!__local_unwind2()+0x 48配置Asm
msvcr100d.dll!_except_handler3()+0固定的配置文件Asm
正在测试.exe!_except_handler4(_EXCEPTION_RECORD * ExceptionRecord,_EXCEPTION_REGISTRATION_RECORD * ExceptionFrame,_CONTEXT * ContextRecord,void * DispatcherContext)+ 0x24 C
正在测试.exe!_except_handler4(_EXCEPTION_RECORD * ExceptionRecord,_EXCEPTION_REGISTRATION_RECORD * ExceptionFrame,_CONTEXT * ContextRecord,void * DispatcherContext)+ 0x24 C
:
- 继续 *:
57 CE 0 EEA莱亚esi,[esi+esi*2]
57CE0EED mov ecx,dword ptr [ebx+esi*4]
57CE0EF0 mov dword ptr [esp+0Ch],ecx
57CE0EF4 mov dword ptr [eax+0Ch],ecx
57CE0EF7 cmp dword ptr [ebx+esi*4+4],0
57CE0EFC jne _lu_continue(57CE0F15h)
57 CE 0 EFE推送101 h
57CE0F03 mov eax,dword ptr [ebx+esi*4+8]
57CE0F07 call _NLG_Notify(57CE0F55h)
57CE0F0C mov eax,dword ptr [ebx+esi*4+8]
57CE0F10 call _NLG_Call(57CE0F74h)
2条答案
按热度按时间fd3cxomn1#
msvcr100d.dll
中崩溃,那么它就发生在PeekMessage
之外(在调用之前或之后)。你应该有很好的调试信息。this
指针(如果适用)xienkqul2#
我不认为你发布的调用堆栈足以从中做出任何事情。
是否有可能在响应消息时调用HandleMessages()?这可能导致递归/堆栈耗尽。