Системное сообщение необработанное исключение

Обнаружена проблема:

Сбой происходит во время разговора DispatchMessage( &msg )Как правильно использовать эту функцию?

Старое сообщение ниже

Я пытаюсь скомпилировать свое первое 64-битное приложение Windows, используя Microsoft Visual Studio 2012 Ultimate и Windows SDK, который прилагается к нему (в прошлом я выполнял 64-битные программы на других системах), и я получаю аварийное завершение Unhandled Exception во время выполнения с этот блок кода точно в строке 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, message, 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}`

РЕДАКТИРОВАТЬ 4: Я вычеркнул функцию (возврат void в первой строке), конечно, приложение работает отлично только без возможности закрыть его, но я заметил, что заголовок окна больше не устанавливается, поэтому я предполагаю, что эта ошибка с созданием окна я опубликую свой код для этого через мгновение.

0

Решение

Вы испортили немного памяти. Это коренная причина. Слой Win32 хранит часть своих данных в памяти процесса. После того, как вы повредите его, функции Win32 могут потерпеть крах.

Удалите все из вашего приложения и оставьте только сообщение сообщения. Это должно работать. После этого добавьте мелкие кусочки. Если вы будете достаточно осторожны, вы заметите, какая часть представляет повреждение памяти.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]