ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

关于VS编译通过,运行时报错的问题,c++ dlgdata.cpp 中ASSERT(FALSE)处发生异常

2022-01-05 18:00:55  阅读:144  来源: 互联网

标签:dlgdata 控件 FALSE 删除 nIDC hWndCtrl ASSERT ID


总结:一般是控件绑定了变量,该控件被删除后,忘记在DoDataExchange中将其对应的DDX_语句删除。只要删除就OK了,最好resource里的资源ID也一起干掉。

我遇到的问题是:异常定位在dlgdata.cpp 中ASSERT(FALSE)处,解决方法:删除了资源视图中的控件,没有同步删除相应的变量与事件函数,DoDataExchange中还存在映射关系,把这些内容删除后,异常解决。

以下为其他博主内容,供大家参考。
     

 近来在vc中遇到 dlgdata.cpp的问题,一般情况下,出现这种问题的原因:
  1、在移植对话框的过程中,对话框中的控件的参数类型不正确
   例如:本来为IDC_List,显示为1000
   修改方法:就是把相应的类型改为 IDC_List
  2、在ddx控制中出现的一些参数在dlg中没有 解决办法:删掉相应的参数
   希望以上办法对大家有所帮助。 

   你的对话框中某个ID对应的控件不存在
   估计你删除了界面上的控件,但是没有删除其映射关系
   以下是出现断言错误的地方,Line43我已标出
   HWND   CDataExchange::PrepareCtrl(int   nIDC)
{
ASSERT(nIDC   !=   0);
ASSERT(nIDC   !=   -1);   //   not   allowed
HWND   hWndCtrl;
m_pDlgWnd-> GetDlgItem(nIDC,   &hWndCtrl);
if   (hWndCtrl   ==   NULL)
{
TRACE1( "Error:   no   data   exchange   control   with   ID   0x%04X.\n ",   nIDC);
*******Line43**** ASSERT(FALSE);
AfxThrowNotSupportedException();
}
m_hWndLastControl   =   hWndCtrl;
m_bEditLastControl   =   FALSE;   //   not   an   edit   item   by   default
ASSERT(hWndCtrl   !=   NULL);       //   never   return   NULL   handle
return   hWndCtrl;
}
      没有找到这个相应控件类型
一般有三种情况:一是控件ID不存在,二是控件未创建,三是控件的类型不对
看看DoDataExchange函数
   我遇到这中情况是 弹不出对话框 后来仔细查看是 控件ID和后面的数据 根本不匹配 也就是他们根本无法交换数据 所以遇到了上述错误 要缩小范围 一般情况下都是在【DoDateExchange】 中。 仔细查看控件ID是否正确。

参考链接:

标签:dlgdata,控件,FALSE,删除,nIDC,hWndCtrl,ASSERT,ID
来源: https://blog.csdn.net/cq_Learnmore/article/details/122328549

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有