VC++/MFC编程,运行后弹出对话框:“试图执行的操作不受支持”问题分析和解决方案

使用VS2008编写C++的MFC框架的对话框程序,程序编译和链接都没问题,程序启动就弹出对话框“试图执行系统不支持的操作”,如图:

试图执行的操作不受支持

试图执行的操作不受支持

我百度搜索,发现很多人也遇到类似的问题,有些人弹出的对话框描述稍有变化:“试图执行系统不支持的操作”

但大同小异,估计是系统和VS版本不同的缘故吧。

问题分析:

我是在向一个EDIT添加了一个value变量之后出现的这个问题;当我在.h和.cpp文件中把相关的变量都注释掉之后,就可以正常弹出Dialog了

解决方案:

那个value变量相关的控件已经被从资源中删除;原因是控件不用了,被我删除了,但是相应控件的DDX没有删除。把跟控件变量相关的都删除干净就ok了

删除控件时要全面,相关的消息处理函数,绑定的变量等都要一并删除。

网友类似案例:

今天在改写一个对话框程序时, 不断弹出了”试图执行的操作不受支持”的警告对话框, 如果点击”确定”忽略这个警告, 程序也能正常运行(并不会异常退出), 但在程序运行的某些时候, 会不断弹出这样的警告对话框.

这到底是怎么回事, 百思不得其解, 而且很奇怪这是个警告对话框, 不是错误对话框(一般错误对话框弹出后, 点击”确定”, 程序会退出的).

在网上查询一下, 有如下内容:

应当是资源的问题,或者某个资源在resource.h中有定义,但是窗体中被你删除了…遇到这种情况一般都是资源造成的,你好好检察一下你的窗体资源 .

这个突然提醒了我, 我记得我之前删除了界面中的几个资源, 会不会是这些资源相关的内容我没有删除干净, 于是在Debug模式下跟踪,终于在” DoDataExchange(CDataExchange* pDX)”中发现如下代码” DDX_Check(pDX, IDC_CHECK_ADD_ASIC_NOTE, m_bIsAddAsicNote)”(其中资源ID为” IDC_CHECK_ADD_ASIC_NOTE”的CheckBox正是我所删除的一个资源, 咦, 既然我已经删除了这个资源, 那为什么在编译的时候程序不警告或报错呢. 在查找了一下, 发现原来在Resource.h中我也没有将” IDC_CHECK_ADD_ASIC_NOTE”删除, 所以导致, 编译时程序只是静态的分析Resource.h存在这个CheckBox的资源ID” IDC_CHECK_ADD_ASIC_NOTE”, 于是就假定这个资源存在, 故” DDX_Check(pDX, IDC_CHECK_ADD_ASIC_NOTE, m_bIsAddAsicNote)”处也不会报错, 但在程序运行时, 由于我多处调用”UpdatData(FALSE)”, 而这个函数会调用” DoDataExchange(CDataExchange* pDX)”函数, 而此时程序才发现其实” IDC_CHECK_ADD_ASIC_NOTE”对应的资源不存在, 所以就会弹出上面的警告了.

 

除此之外, 有时Resource.h中资源ID如果有重复, 也会导致上面的问题.

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0
分享
评论 抢沙发
CPPKU的头像-cppku-C++库

昵称

取消
昵称表情代码图片