+ -
当前位置:首页 → 问答吧 → 在对话框里执行下面语句总是出现Debug Assertion Failed!而在视图类就很正常

在对话框里执行下面语句总是出现Debug Assertion Failed!而在视图类就很正常

时间:2011-12-14

来源:互联网

class CGridDlg : public CDialog
{
public:
  CMyDoc* GetDocument();
CMySet* m_pSet;
CGrid(CWnd* pParent = NULL); // standard constructor

// Dialog Data
//{{AFX_DATA(CGrid)
enum { IDD = IDD_GRID };
CMSFlexGrid m_MSFGrid;

 BOOL CGridDlg::OnInitDialog() 
{
 
CDialog::OnInitDialog();
m_pSet = &GetDocument()->m_mySet;
while(!m_pSet->IsEOF()) m_pSet->MoveNext();
m_pSet->MoveFirst();
m_MSFGrid.SetCols(m_pSet->m_nFields+1);
m_MSFGrid.SetRows(m_pSet->GetRecordCount()+1);

m_MSFGrid.SetRow(0); m_MSFGrid.SetCol(0);
m_MSFGrid.SetText("记录号");
m_MSFGrid.SetCellAlignment(4); //单元格对齐方式,4表示水平和垂直居中
CODBCFieldInfo field;
for (UINT i=0; i<m_pSet->m_nFields; i++)
{
m_MSFGrid.SetRow(0); m_MSFGrid.SetCol(i+1);
m_pSet->GetODBCFieldInfo(i,field); // 获取指定字段信息
  m_MSFGrid.SetText(field.m_strName);
m_MSFGrid.SetCellAlignment(4);
}
  int iRow=1;
while (!m_pSet->IsEOF())
{ // 将表的记录内容显示在单元格中
CString str;
str.Format("记录%d",iRow);
m_MSFGrid.SetRow(iRow); m_MSFGrid.SetCol(0);
m_MSFGrid.SetText(str);
m_MSFGrid.SetCellAlignment(4);
for (UINT i=0; i<m_pSet->m_nFields; i++) 
  {
m_MSFGrid.SetRow(iRow); m_MSFGrid.SetCol(i+1);
m_pSet->GetFieldValue(i, str); // 获取指定字段值,并自动转换成字符串
   
m_MSFGrid.SetText(str);
m_MSFGrid.SetCellAlignment(4);
}
iRow++;
m_pSet->MoveNext();
}
m_MSFGrid.SetRow(1); m_MSFGrid.SetCol(1);
m_pSet->MoveFirst();

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
上面的初始化函数在View类里运行的很正常,但在我自定义的CGridDlg类里就出现Debug Assertion Failed
File:objcore.cpp Line:43
File:objcore.cpp Line:45
忽略这两个之后,Microsoft基础类应用程序服务已停止工作的对话框


作者: dsbz2011   发布时间: 2011-12-14

单步调试,看具体出错语句,可能控件初始化等有问题

作者: oyljerry   发布时间: 2011-12-14

经过调试,发现是执行m_pSet = &GetDocument()->m_mySet这句话时调用下面下面的函数出错
CMyDoc* CMyView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
return (CMyDoc*)m_pDocument;
}

作者: dsbz2011   发布时间: 2011-12-14

对话框有Document吗?

作者: zhouzhipen   发布时间: 2011-12-14

class CGridDlg : public CDialog
{
public:
  CMyDoc* GetDocument();

对话框类没这个的,视图类才有。

作者: wltg2001   发布时间: 2011-12-14

哦,是这样的。我在CGridDlg 类里定义了一个视图类的成员变量,删去CMyDoc* GetDocument();
还是出现那种问题。下面是我新定义的
class CMyGridDlg : public CDialog
{
// Construction
public:
CMyView m_MyView;
CMyGridDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
//{{AFX_DATA(CMyGridDlg)
enum { IDD = IDD_GRID };
CMSFlexGrid m_MSFGrid;

作者: dsbz2011   发布时间: 2011-12-14

热门下载

更多