在过程迁移到现有的32位MFC代码为64位,我做了成功的构建,并试图对代码进行测试CDialog的:的DoModal崩溃从32迁移后默默地到64位
不幸的是在测试过程中似乎
未按协议栈
hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate, pParentWnd->GetSafeHwnd(), AfxDlgProc);
CreateDlgIndirect(lpDialogTemplate, CWnd::FromHandle(hWndParent), hInst)
CDialog::DoModal()
不转储产生,也没有发生的例外是越来越受SEH
陷入失败(而崩溃) 210我试着比较调试运行与现有的工作Win32调试运行,但无法找到任何显着差异
在这一刻,我很无能,我应该如何继续。任何形式的帮助是备受期待
异常信息:在0x000007fefd89a5ed(KernelBase.dll)在xyz.exe 第一次机会异常:0x000:为0x1234。
实际的问题
企业的实际问题,是由于这是发生导致它崩溃指针截断。 @ OwenWengered的解决方案确实帮助我找出问题并处理我目前正在工作的所有这种指针截断。我很幸运:-)
所以32位代码的作品,对吧?代码失败的地方在哪里?在CDialog :: DoModal()中?顺便说一句:对CDialog :: DoModal的调用看起来很奇怪。在您发布的3行代码旁边发布更多代码。你有没有从64位编译器得到任何警告?尝试在启用所有警告的情况下重新编译。 – 2013-02-26 12:28:28
这是在将32位代码转换为64位时可能会失败的一件事。通常由将指针存储为int或long引起。你将需要调试它。 – 2013-02-26 12:46:50
说您的应用程序在DoModal()中崩溃无助于确定原因。这就像说你的应用程序在main()中崩溃。在异常处设置断点,以便您可以在发生异常的位置看到本地调用堆栈。对于VS 2008,这有点旧,但它可能有所帮助:http://otb.manusoft.com/2008/05/debugging-objectarx-break-on-exception.htm – 2013-02-27 03:57:46