mfc 程序,debug版本正常和release版本异常。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfc 程序,debug版本正常和release版本异常。相关的知识,希望对你有一定的参考价值。
下面一段代码:
CEdit *pEdit;
CString strTmp;
pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->GetWindowText(strTmp);
在debug版本下正常运行,但是如果改成release版本的话就会在 pEdit->GetWindowText(strTmp); 报出异常,在这种情况下,如果我将前面的CString strTmp;在声明的时候改成 CString strTmp = “null”;(就是给它赋一个初值,空字符串还不行,一定要有内容)
当我改了以后release版本也可以正常运行了,求大神指点这是声明原因?
我怀疑是编译器设置的原因,但是却不知道如何修改,求指点!!!先拜谢了。。。
我测试了一下,RELEASE编译,即使空内容获取也没有问题。
我觉得,应该是你的项目中RELEASE版本的优化做的太多,或者程序其它原因造成的。
因为版本和环境差异,建议你自己先试验一下:
建立一个类似的MFC对话框工程,简单一个按钮一个编辑框,使用以上代码,RELEASE编译,看看有没有问题,如果没有,对比一下RELEASE版本的优化参数有什么不同(有就调整),如果没有不同,那么应该是你程序其它代码干扰的问题了,这种干扰问题很麻烦,只能是熟悉代码的情况下进行分析优化,没有太好的建议。
您好,您的这种方法我也尝试过,新建一个小的mfc程序,我自己试的时候也是正常的,两种版本都可运行,可是一到我现在项目的那个mfc程序里面就出问题了,我也对照了两个mfc程序里面release版本所做的优化,并且做了相应的修改,可结果还是不行。。。。
真的是个很奇怪的问题。
一般这种情况,多数是其它代码地址越界或者溢出之类的干扰,或者全局、作用域方面的影响,没法直接判断。
可以先注销代码方式,一个一个功能的注销看看,什么时候能正常,然后再集中分析代码问题。
何必非要转换CEdit 指针?
直接利用CDialog 基类中的SetDlgItemText() 方法或WIN32 API 即可。
基类方法: SetDlgItemText(IDC_EDIT1, strTemp);
WIN32 API: ::SetDlgItemText(m_hWnd,IDC_EDIT1, strTemp);
VS2010 C++ MFC写的程序编译可以正常运行,但是我想直接运行,DEBUG里找不到EXE文件
我刚学C++,以前都是用C#,不知道是不是搞错了,求大家指导一下谢谢
呵呵,不用回答了,原来是我搞错文件夹了
以上是关于mfc 程序,debug版本正常和release版本异常。的主要内容,如果未能解决你的问题,请参考以下文章
MFC读取excel文件程序,在release模式下正常读取,但在debug模式编译没问题,运行就关闭,求高手!
VS2010 C++ MFC写的程序编译可以正常运行,但是我想直接运行,DEBUG里找不到EXE文件
CMFCColorDialog 在 MFC 属性页中作为 Release 不工作,作为 Debug 工作正常