mfc 程序,debug版本正常和release版本异常。

下面一段代码:CEdit*pEdit;CStringstrTmp;pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);pEdit->GetWindow... 下面一段代码:
CEdit *pEdit;
CString strTmp;
pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->GetWindowText(strTmp);
在debug版本下正常运行,但是如果改成release版本的话就会在 pEdit->GetWindowText(strTmp); 报出异常,在这种情况下,如果我将前面的CString strTmp;在声明的时候改成 CString strTmp = “null”;(就是给它赋一个初值,空字符串还不行,一定要有内容)
当我改了以后release版本也可以正常运行了,求大神指点这是声明原因?

我怀疑是编译器设置的原因,但是却不知道如何修改,求指点!!!先拜谢了。。。
展开
 我来答
bhtzu
2013-09-24 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4268万
展开全部

我测试了一下,RELEASE编译,即使空内容获取也没有问题。

我觉得,应该是你的项目中RELEASE版本的优化做的太多,或者程序其它原因造成的。

因为版本和环境差异,建议你自己先试验一下:

建立一个类似的MFC对话框工程,简单一个按钮一个编辑框,使用以上代码,RELEASE编译,看看有没有问题,如果没有,对比一下RELEASE版本的优化参数有什么不同(有就调整),如果没有不同,那么应该是你程序其它代码干扰的问题了,这种干扰问题很麻烦,只能是熟悉代码的情况下进行分析优化,没有太好的建议。

追问
您好,您的这种方法我也尝试过,新建一个小的mfc程序,我自己试的时候也是正常的,两种版本都可运行,可是一到我现在项目的那个mfc程序里面就出问题了,我也对照了两个mfc程序里面release版本所做的优化,并且做了相应的修改,可结果还是不行。。。。
真的是个很奇怪的问题。
追答
一般这种情况,多数是其它代码地址越界或者溢出之类的干扰,或者全局、作用域方面的影响,没法直接判断。
可以先注销代码方式,一个一个功能的注销看看,什么时候能正常,然后再集中分析代码问题。
bd_zwj
2013-09-24 · TA获得超过161个赞
知道小有建树答主
回答量:256
采纳率:0%
帮助的人:243万
展开全部

何必非要转换CEdit 指针?


直接利用CDialog 基类中的SetDlgItemText() 方法或WIN32 API 即可。 


  1. 基类方法: SetDlgItemText(IDC_EDIT1, strTemp);

  2. WIN32 API: ::SetDlgItemText(m_hWnd,IDC_EDIT1, strTemp);

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式