当前位置: 首页 > article >正文

VC6.0常见错误之::Debug Assertion Failed!

VC6.0常见错误之::Debug Assertion Failed!

1、VC6.0常见错误之:Debug Assertion Failed!在winocc.cpp第301行错误
断言错误,如图:

找到winocc中的源代码如下:

[cpp]  view plain copy
  1. BOOL CWnd::ShowWindow(int nCmdShow)  
  2. {  
  3.  ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));//错误在此  
  4.   
  5.  if (m_pCtrlSite == NULL)  
  6.   return ::ShowWindow(m_hWnd, nCmdShow);  
  7.  else  
  8.   return m_pCtrlSite->ShowWindow(nCmdShow);  
  9. }  

错误原因分析:

下面是我原来的写法,导致错误:

[cpp]  view plain copy
  1. BOOL CDlgControlPanel::HideAll()  
  2. {  
  3.     this->m_pDlgReport = new CDlgReport;  
  4.     this->m_pDlgReport->Create(CDlgReport::IDD,this);  
  5.     this->m_pDlgReport->ShowWindow(SW_SHOW);  
  6. }  
解决方法:
[cpp]  view plain copy
  1. BOOL CDlgControlPanel::HideAll()  
  2. {  
  3.     this->m_pDlgReport = new CDlgReport;  
  4.     this->m_pDlgReport->Create(CDlgReport::IDD,this);  
  5.     ::ShowWindow(this->m_pDlgReport->m_hWnd, SW_SHOW);  
  6. }  

区别就在于调用ShowWindow的方式。

真正原因是什么呢,是因为API传进去的句柄是这个控件的句柄,即控件->m_hWnd,而MFC传进去的句柄是此类(即CDlgReport类)的句柄,即this->m_hWnd。还有一点需要注意的是,可能在Release版本有时会运行正常,就侥幸这样用了,其实不管是Release版本还是Debug版本,都必须用上面的办法处理,如果你要控制某一个控件,那么你就传它对应的句柄,不要传别人的句柄进去。

感谢“C++帮助文档”的博客:http://hi.baidu.com/vc_net/blog/item/0fc01f307812d580a8018e2c.html


2、VC6.0常见错误之:Debug Assertion Failed!在dlgdata.cpp第43行错误

对话框中某个ID对应的控件不存在 
估计删除了界面上的控件,但是没有删除其映射关系 
以下是出现断言错误的地方

[cpp]  view plain copy
  1. HWND   CDataExchange::PrepareCtrl(int   nIDC)   
  2. {   
  3. ASSERT(nIDC   !=   0);   
  4. ASSERT(nIDC   !=   -1);   //   not   allowed   
  5. HWND   hWndCtrl;   
  6. m_pDlgWnd-> GetDlgItem(nIDC,   &hWndCtrl);   
  7. if   (hWndCtrl   ==   NULL)   
  8. {   
  9. TRACE1( "Error:   no   data   exchange   control   with   ID   0x%04X.\n ",   nIDC);   
  10. ASSERT(FALSE);  //错误在此  
  11.   
  12. AfxThrowNotSupportedException();   
  13. }   
  14. m_hWndLastControl   =   hWndCtrl;   
  15. m_bEditLastControl   =   FALSE;   //   not   an   edit   item   by   default   
  16. ASSERT(hWndCtrl   !=   NULL);       //   never   return   NULL   handle   
  17. return   hWndCtrl;   
  18. }  

感谢vocanicy,来自http://topic.csdn.net/u/20070919/18/98a3444e-ff9b-4f7b-acb5-a35783379376.html


3、VC6.0常见错误之:Debug Assertion Failed!在winctrl1.cpp在184行

错误源代码如下:

[cpp]  view plain copy
  1. // Derived class is responsible for implementing these handlers  
  2. //   for owner/self draw controls (except for the optional DeleteItem)  
  3. void CComboBox::DrawItem(LPDRAWITEMSTRUCT)  
  4. { ASSERT(FALSE); }//错误在此  
  5. void CComboBox::MeasureItem(LPMEASUREITEMSTRUCT)  
  6. { ASSERT(FALSE); }  
  7. int CComboBox::CompareItem(LPCOMPAREITEMSTRUCT)  
  8. { ASSERT(FALSE); return 0; }  
  9. void CComboBox::DeleteItem(LPDELETEITEMSTRUCT)  
  10. /* default to nothing */ }  

 

错误指向CComboBox控件不能绘制。当时我遇到的问题原因是,我把这个控件当做自定义MyComboBox类使用,但在声明的时候忘了修改类型,导致报错。

解决方法只要在头文件中修改控件类型就行了。

其实关于winctrl1.cpp,很多类似的错误也一样的。都是控件类型搞错。

4、VC6.0常见错误之:afxwin2.inl第126行

错误源代码如下:

[cpp]  view plain copy
  1. _AFXWIN_INLINE void CWnd::Invalidate(BOOL bErase)  
  2. {  
  3.  ASSERT(::IsWindow(m_hWnd));\\错误在此  
  4.  ::InvalidateRect(m_hWnd, NULL, bErase);  
  5.  }  

看到IsWindow就明白了吧,是空句柄!也就是该对话框还未创建。

我遇到的情况是,A类的Clear函数中调用了this->Invalidate();,而B类调用了A类的Clear函数,此时A类还未实例化,所以A类句柄为空,m_hWnd = NULL。我的解决方法是将A类的实例化放在B类前,问题解决。

http://www.lryc.cn/news/2417417.html

相关文章:

  • C#使用FileSystemWatcher来监控指定文件夹,并使用TCP/IP协议通过Socket发送到另外指定文件夹
  • 虚拟机Linux IP地址更改
  • 13 | 如何为团队设定合理的目标呢?
  • input标签 各属性解释
  • 热插拔机制之udev和mdev
  • MFC教程(Visual C++ 6.0)|合集 |更新中
  • bluetooth 外围设备 驱动有问题 解决办法
  • java中Date/Time/Timestamp对应sql
  • 数据库之 MongoDB and SQLite
  • img文件制作linux启动u盘,制作Linux的U盘启动盘
  • Python后端---使用Django+Mysql搭建一个简单的网站
  • 1.4种权限控制
  • Oracle INSERT INTO的几种用法
  • 效率工具:分享7款实用的任务管理软件,值得收藏!
  • d3dx9_25.dll文件丢失的解决方法
  • 【系统分析与设计】UML协作图绘制方法(真の能看懂~!)
  • Linux export 命令用法
  • 【数理逻辑】范式 ( 合取范式 | 析取范式 | 大项 | 小项 | 极大项 | 极小项 | 主合取范式 | 主析取范式 | 等值演算方法求主析/合取范式 | 真值表法求主析/合取范式 )
  • ant man什么意思_ant是什么意思_ant的翻译_音标_读音_用法_例句_爱词霸在线词典...
  • WinRunner使用经验介绍
  • 机器学习分类算法之XGBoost(集成学习算法)
  • 超市综合管理信息系统(源程序+论文+PPT)部门员工考勤管理商品采购供应商商品销售企业财务信息管理模块
  • 安卓SDK——ShareSDK
  • DWDM原理与光纤传输
  • mRMR
  • wpf RichTextBox绑定文字
  • pmp全真模拟题100道(含答案)
  • 流量劫持原理解析、流量劫持怎么办怎么解决
  • 浅谈LigerUi Tree(树)
  • 期末大作业 个人口令管理系统(密码学)