Я пытаюсь перенести 32-битное приложение на 64-битное.Похоже, что вычисления выполняются правильно, но я не могу правильно настроить представления.Я использую MFC, C ++ и OpenGL, компилятор Intel 10.0.027 внутри VS2005 на машине W7 x64.
Когда происходит сбой, я получаю следующее сообщение: «Исключение первого шанса в 0xffffffff8043b1b6 в 3DApp.exe: 0xC0000005: нарушение прав доступа в расположении 0xffffffff8043b1b6 ", и это трассировка стека:
ffffffff8043b1b6()
user32.dll!UserCallWinProcCheckWow() + 0x11d bytes
user32.dll!DispatchMessageWorker() + 0x12a bytes
3DApp.exe!AfxInternalPumpMessage() Line 183 C++
3DApp.exe!CWinThread::PumpMessage() Line 896 C++
3DApp.exe!CWinThread::Run() Line 625 + 0x13 bytes C++
NOTE PLEASE почему вызывается UserCallWinProcCheckWow, я думал, что суффикс Wow был только для эмуляции 32-битных приложений на64-разрядный компьютер
Очевидно, что где-то 64-разрядный указатель рассматривается как 32-разрядный указатель, но я не могу точно указать, где это происходит.Я загрузил отладочные символы из Microsoft, которые показывают верхнюю часть стека вызовов.
Любая помощь с благодарностью.Леон
РЕДАКТИРОВАТЬ
Код, вызывающий DispatchMessage:
if (pState->m_msgCur.message != WM_KICKIDLE && !AfxPreTranslateMessage(&(pState->m_msgCur)))
{
::TranslateMessage(&(pState->m_msgCur));
::DispatchMessage(&(pState->m_msgCur));
}
На этом этапе указатели pState выглядят 64-битными.
Состояние pState-> m_msgCu:
- pState-> m_msgCur {msg = 0x00000022 wp = 0x0000000000000000 lp = 0x0000000000000000} тэг MSG
- h0000000000000000000000* сообщение 0x00000022 без знака int wParam 0x0000000000000000 без знака __int64 lParam 0x0000000000000000 __int64 время 0x000f3967 без знака long
- pt {x = 0x0000030f y = 0x00000356} tagPOINT