在对话框里执行下面语句总是出现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基础类应用程序服务已停止工作的对话框
{
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;
}
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();
对话框类没这个的,视图类才有。
{
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;
还是出现那种问题。下面是我新定义的
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28