在過程遷移到現有的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