是VC的BUG吗?将同一个对话框资源IDD_DIALOG1生成两个不同的类但同一基类都是CDialog,对话框资源里面有个IDC_TAB1(页面控件)...
本来只生成一个类用时,那个页面控件CMYTabCtrl我重新继承CTabCtrl的~程序运行一切正常~但当再通过资源视图添加多一个类后~,可以编译,连接通过的~但运行出错了
中断在atlsimpstr.h 的539行
int GetLength() const throw()
{
return( GetData()->nDataLength );//////////中断
}
此时调用的堆栈显示
> mfc80d.dll!ATL::CSimpleStringT<wchar_t,0>::GetLength()  行539 + 0x8 字节 C++
  mfc80d.dll!ATL::CSimpleStringT<char,1>::SetString(const char * pszSrc=0x0043c4a8, int nLength=1)  行638 + 0x8 字节 C++
  mfc80d.dll!ATL::CSimpleStringT<char,1>::SetString(const char * pszSrc=0x0043c4a8)  行620 C++
  mfc80d.dll!ATL::CSimpleStringT<char,1>::operator=(const char * pszSrc=0x0043c4a8)  行340 C++
  mfc80d.dll!ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > >::operator=(const char * pszSrc=0x0043c4a8)  行1282 C++
  TeHao.exe!CTabSheet::AddPage(const char * title=0x0043c4a8, CDialog * pDialog=0x0012a234, unsigned int ID=130)  行45 + 0x1c 字节 C++
  TeHao.exe!Ctabpaihao::OnInitDialog()  行53 C++
  mfc80d.dll!AfxDlgProc(HWND__ * hWnd=0x000e0768, unsigned int message=272, unsigned int __formal=395120, unsigned int __formal=395120)  行28 + 0x10 字节 C++
  user32.dll!77d18734() 
...
从程序原文件开始出错的位置是
我的继承类CMYTABCTRL也就是CTabSheet的
BOOL CTabSheet::AddPage(LPCTSTR title, CDialog *pDialog,UINT ID)
{
if( MAXPAGE == m_nNumOfPages )
return FALSE; m_nNumOfPages++; m_pPages[m_nNumOfPages-1] = pDialog;
m_IDD[m_nNumOfPages-1] = ID;
m_Title[m_nNumOfPages-1] = title;/////////////之后出错
return TRUE;
}但我觉得问题应该不是这里~可能是页面的句柄?,
但程序运行可以过tab1.SubclassDlgItem(IDC_TAB1,this)且返回得到有效句柄;我工程用的字符集为多字符集~IDD_DIALOG1为child样式 通过CTabSheet加入页面IDD_DIALOG2(child-style)里面放一继承的CMYListCtrl(列表)
程序是中断在初始化IDD_DIALOG1时,初始化CTabSheet的addpage.还没进入初始化IDD_DIALOG2的,其实奇怪的是~
我新建一个工程,重复上面的条件试`就算同一对话框资源生成三个类,并初始显示一些信息都可以运行~
但我这个旧工程就不可以~~更奇怪的是~~~当我删除了那个类的声明和定义~和应用~删除了对应的.H和.CPP后(物理删除)~重新生成程序后或者重新生成解决方案后,程序始终也都是运行时中断在我上面说的地方~这也就是我所说的BUG?
也就是说我把工程还原到没添加同资源类前的状态,也都运行不了~
天啊~~~~~~好不明白!!!!!!!!
也只有我之前保存下的副本~没添加过同资源类的,才像以前一样运行

解决方案 »

  1.   

    由于CString的共享内存机制造成的。
    你在那一行下面加上m_Title[..].GetBuffer();m_Title[..].ReleaseBuffer();试试。
      

  2.   

    啊啊啊~~我又终于找到了原因了~其实添加过同资源类没问题的~原来是一个二维数组的声明问题~
    本来我把int abc[10][50]放在cpp文件中的~ 后来添加同资源类后 放到了.h文件中~ 运行就出现上面的事了~
    困惑呀~~     谁可以比个解释!!!!        分~~~~Mackz兄~现在应该也是内存机制问题~影响了吧?,,
      

  3.   

    int abc[10][50]是放在哪个头文件里面?做什么用的?
      

  4.   

    int abc[10][50];
    放在了IDD_DIALOG1类里面的声明中.正常来说是没问题的~就是有两个对象引用到各自的成员变量~int abc[10][50];//也不算是申请很大的空间拉~现在就出现问题,我重新维修了个程序~
    现在中断在对话框的 创建函数中 
    object->Create(IDD_1,this);把int abc[10][50];//放回CPP中就没问题~
      

  5.   

    补充~
    我有多个对话框对象的
    他是中断在第二次创建同名资源名的地方
    也就是:
    obj1->Create(IDD_1,this); //pass
    obj2->Create(IDD_x,this); //pass
    ...
    objn->Create(IDD_1,this); //中断
      

  6.   

    那个m_pPages、m_IDD和m_Title是干什么的?看看m_Title数组下标是否越界了。
      

  7.   

    理论上是不会出现这种问题的,如果出现这种问题,可能你的电脑有问题,换一条内存试试。或者换一个cpu风扇试试,很灵验的^_^