(轉)http://blog.csdn.net/zhaodan19861107/article/details/8296187
-----------------------ge-------------------------------------------------ge-----------------------------------------
轉自:http://www.cnblogs.com/qwcbeyond/archive/2011/05/23/2054525.html
在VS2010 運行一個C++ 程序,出現下圖錯誤:
一看到這個,我頭都大了。關鍵是 f:/dd/vctools/vc7libs/ship/atlmfc/src/mfc/dlgdata.cpp 這個路徑根本在我計算機不存在。但是估計在安裝目錄下。
聯想到最近更新到VS2010_sp1 ,但是發行包:
en_visual_c++_2010_sp1_redistributable_package_x86_651767
沒安裝,安裝後再試,還是出錯。
爲了找到dlgdata.cpp 我用了下面的自己寫的搜索工具,
搜到後,用工具打開該文件,然後在打開的記事本上點擊:查看->狀態欄,然後定位到40行:
總算知道大概了,在谷歌上搜索關鍵詞:CDataExchange::PrepareCtrl ,第一個搜索結果,
http://blog.csdn.net/zipper9527/archive/2009/06/19/4282229.aspx
裏面提到“我認爲原因是你爲一個控件進行變量綁定,後來你覺得這個控件沒用了,就直接在對話框上把控件刪除了,而這裏的關聯代碼卻沒刪除”。
關鍵是我不知道我的nIDC 是多少,後來發現有好多個nIDC,因爲我綁定了很多變量。既然如此,那就把 dlgdata.cpp 拖到當前項目的vs2010 環境,打開dlgdata.cpp後,在第40行處設斷點,點綠色運行按鈕,很快到斷點處了。
哈哈,nIDC找到了,是1008。
然後找到 對應的 ID_Edit1。
然後按照
http://blog.csdn.net/zipper9527/archive/2009/06/19/4282229.aspx
註釋掉相關行
//DDX_Control(pDX, IDC_Edit1, m_xxxx);
並把IDC_Edit1註釋掉,m_xxxx 也註釋掉,
再次運行,再也沒有命中斷點了。Yeah!!!
分析原因:原來當初設置了一個文本框控件Eidt1,後來給它綁定到一個變量,然後覺得不好,又把這個控件替換成ComboBox,於是,就出現後來的這個現象了。
結論:以後刪除控件前,先取消對控件的變量綁定,然後再刪除控件。