运行时错误:Error: no data exchange control with ID 0xXXXX
作者:BlogUpdater |
时间:2019-03-12 |
浏览:4528 |
评论已关闭 条评论
有时候会碰到一些奇怪的运行时问题,如标题所示。
当我们在VS中拖了一个控件到对话框模板上,我们通常会将这个控件绑定到一个变量上。例如,我们会将一个CButton绑定到一个按钮,将CEdit绑定到一个编辑框。如果没有给予特别的注意,就会出现如下的错误:
Error: no data exchange control with ID 0xXXXX
并且,这个错误仅在Debug版本出现,而且它还是隐藏在MFC的调试输出中。如果你直接跑一个有问题的程序,你仅仅会看到一个通用的,平淡无奇的断言失败错误,进而整个应用程序走向生命的终点。
下面介绍可能的原因:
资源ID重复
随着工程的规模越来越大,我们使用的控件也会随之增加,如果不小心,将一个控件的资源ID和另一个控件的ID重复了,那么在DDX_Control阶段就会让MFC框架犯难了:为什么这个ID标识的是一个按钮,你却要绑定到一个CEdit变量上。
原因就在于,这个ID不仅是按钮的ID,也同时是编辑框的ID。通常,这个错误很容易找到,直接打开resource.h,查看那些控件共用相同的ID即可。以下是代码片段:
#define IDC_BUTTON1 122
#define IDC_EDIT1 122
不在控件所在的父窗口执行DDX_Control
这个原因比较少见,也比较隐秘。有时候代码写太多,一下子脑袋犯迷糊就会犯这样的错误。需要牢记:一般DDX_Control需要在控件的父窗口执行,否则也会出现如上的错误。
总结
1) 保持控件的ID唯一
2) 检查DDX_Control是否出现在正确的父窗口代码中。
如需转载,请注明来自:拓扑梅尔智慧办公平台 | TopomelBox 官方站点
相关推荐
- 使用吉特哈布Codespaces和Visual Studio Code进行C++开发
- Posted on 04月08日
- Visual C++ 2005 可以生成清单信息了
- Posted on 03月11日
- 试试Visual Studio中新的远程文件查看器
- Posted on 03月03日
- 官宣:新版Azure SDK for C++ 测试版本发布
- Posted on 10月14日
评论已关闭。