发现问题:
崩溃发生在调用DispatchMessage( &msg )
中,这个函数的正确用法是什么?
下面是旧留言
我正在尝试使用 Microsoft Visual Studio 2012 Ultimate 和随附的 Windows SDK 编译我的第一个 64 位 Windows 应用程序(我过去在其他系统上做过 64 位程序),我在运行时遇到未处理的异常崩溃这段代码正好在行if (msg.message == WM_QUIT)
,我根本想不通,该程序在 32 位下运行良好。
程序所做的只是启动然后将此块作为方法运行,它会在崩溃之前到达这一点。
我正在 Windows 7 上编译和运行它。
MSG msg;
while ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) {
// No message translation because we don't use WM_CHAR and it would conflict with our
// deadkey handling.
//if ( ExternalWindow && msg.hwnd == HWnd ) {
//WndProc(HWnd, msg.message, msg.wParam, msg.lParam);
//} else {
DispatchMessage( &msg );
//}
if ( msg.message == WM_QUIT ) {
Close = true;
}
}
我正在链接这些库:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib
很抱歉,我无法提供更深入的信息我对 Windows SDK 相当不熟悉,正如我之前所说,这是我的第一个 64 位 Windows 应用程序(它适用于 32 位,所以我猜它是指针大小/存储问题?)。
编辑:这也是非 unicode,所以它PeekMessageA()
和DispatchMessageA()
.
EDIT2:WndProc()
只是读取用户输入,目前它是一个空函数,我的断点告诉我它没有被调用。ExternalWindow
为 false 且 HWnd 有效,因为窗口在崩溃前弹出并显示。
EDIT3:这里的内容msg
,消息,wParam 和 lParam 每次运行都保持不变,显然点,时间和窗口位置随着每次启动而变化。
msg {msg=0x0000031f wp=0x0000000000000001 lp=0x0000000000000000}
hdnw 0x00000000004a2594 {unused=-842150451 }
message 799
wParam 1
lParam 0
time 29882662
pt {x=1479 y=581}`
EDIT4:我删除了函数(在第一行返回 void),当然应用程序运行得很好,只有无法关闭它,但我注意到不再设置窗口标题,所以我猜这个错误是随着窗口的创建,我稍后会发布我的代码。