抱怨VC6//File: afx.ini Line: 122 的bug
¶抱怨VC6//File: afx.ini Line: 122 的bug
原文連結: https://darkblack01.blogspot.com/2013/04/vc6file-afxini-line-122-bug.html
移植時的最後更新日期: 2013-04-15T14:47:56.261+08:00
這個MFC的問題,我在網路上也是找了很久,沒有解,一直到無意間解開了!再重現。以下是以我自己的case做範例重現。
我的main project使用SDI,利用Menu打開各種的Dialog做操作,各個Dialog我都做一個sub project檔來個別開發、測試,最後在main project用#include的方式把code加入,再把dialog的interface給拉到main project,這樣就可以使用。
但是,這樣卻引發了一個隱藏的問題。
問題描述:
我想要把sub project給刪除掉,並且將code整合到main project。這兩個project重疊的檔案
從這開始操作
在main project中,加入code
新增dialog(命名了相同的名字)
複製sub project中要的dialog所有的member function
執行程式
開啟這次移植的dialog,出現了這次問題的主角
收集線索
先來看看什麼是afx.ini line: 122
// CString
_AFX_INLINE CStringData* CString::GetData() const
{
ASSERT(m_pchData != NULL);
return ((CStringData*)m_pchData)-1;
}
CString???再看看dialog啟動的程式段
void CColorEyeIApp::OnFileOmdtoxls()
{
// TODO: Add your command handler code here
CSelExcelDlg dlgSelExcel;
dlgSelExcel.DoModal();
}
用debugger看看程式執行到此收集到的線索及推測
「此bug是由button按下之後,到dialog::deconstruct()執行完畢出的問題。」
變成
「此bug是由程式deconstruct執行完畢出的問題。」
先看看是CString()還是CSelExcelDlg()的問題?
CSelExcelDlg()沒有override,那找找看CString()出問題的可能性。
看看CSelExcelDlg中,到底有沒有CString
class CSelExcelDlg : public CDialog
{
FormType m_ft;
int m_openOmdLimit;
std::vector><cstring> m_omdFilesList; // m_vOmdFilePathList;
//…
發現CString!!!這個CString member variable相關的member function都註解掉
執行程式
- 按下Cancel
- CSelExcelDlg </li><li><strike>CString
- 當掉
還是當掉了。
問題就是沒有被overload的~SelExcelDlg了?!
李組長眉頭一皺,發現案情並不單純!
怎麼可能沒override卻出了問題?
問題真正的解法
就在整理程式碼(刪掉SelXls/SelExcelDialog.h & SelXls/SelExcelDialog.cpp)之後,發現#include出了問題修正#include的檔案之後。
再Rebuild All,就好了。
發表於
tags:
{ WIN32 API/MFC }
{ 抱怨VC6 }