运行时错误48加载dll错误_运行时错误:Error: no data exchange control with ID 0xXXXX

问题

有时候会碰到一些奇怪的运行时问题,如标题所示。

当我们在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是否出现在正确的父窗口代码中。

ecb680ad457e02cfeb574636b0003a58.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值