我的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
執行程式
收集線索
先來看看什麼是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
~CString- 當掉
還是當掉了。
問題就是沒有被overload的~SelExcelDlg了?!
李組長眉頭一皺,發現案情並不單純!
怎麼可能沒override卻出了問題?
問題真正的解法
就在整理程式碼(刪掉SelXls/SelExcelDialog.h & SelXls/SelExcelDialog.cpp)之後,發現#include出了問題修正#include的檔案之後。
再Rebuild All,就好了。
沒有留言:
張貼留言
(什麼是留言欄訊息?)