Leo*_*eon 4 c++ 64-bit mfc visual-c++
我试图将32位应用程序移植到64位.计算似乎正确运行,但我无法正确配置视图.我在W7 x64机器上使用VS2005内的MFC,C++和OpenGL,Intel 10.0.027编译器.
当崩溃发生时,我收到以下消息:"3DApp.exe中0xffffffff8043b1b6的第一次机会异常: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++
Run Code Online (Sandbox Code Playgroud)
注意请问为什么UserCallWinProcCheckWow被调用,我认为Wow后缀仅用于在64位计算机上模拟32位应用程序
显然,某处64位指针被视为32位指针,但我不能指出发生的位置.我从microsoft加载了调试符号,它显示了调用堆栈的顶部.
任何帮助非常感谢.莱昂
编辑
调用DispatchMessage的代码是:
if (pState->m_msgCur.message != WM_KICKIDLE && !AfxPreTranslateMessage(&(pState->m_msgCur)))
{
::TranslateMessage(&(pState->m_msgCur));
::DispatchMessage(&(pState->m_msgCur));
}
Run Code Online (Sandbox Code Playgroud)
在这个阶段,pState的指针似乎是64位.
pState-> m_msgCu的状态:
小智 9
我刚刚解决了同样行为的问题.错误是将参数传递给SetWindowLongPtr(GWLP_WNDPROC),指向WndProc的指针未正确地转换为LONG而不是正确的LONG_PTR.这样,指向WndProc的错误指针被放入内部OS WND结构中,因此对HWND的WndProc的任何后续调用都会崩溃.
归档时间: |
|
查看次数: |
4635 次 |
最近记录: |