当前位置: 首页 > news >正文

debug版本release版本下的GetDlgItem问题

//release版本下不能这样写,debug版本下没问题

GetDlgItem(IDC_STATIC_WAIT)->SetWindowTextA("正在登陆服务器,请稍候...");

出错:error C2039: SetWindowTextA: 不是“CWnd”的成员。

原来这样写:

m_cWaitText.SetWindowTextA("正在登陆服务器,请稍候...");

也出错:error C2039: SetWindowTextA: 不是“CStatic”的成员。

 

//以上代码在debug版本下没问题,release版本下不能这样写,原因是:

//1、线程函数是全局函数不能调用它的非static成员函数,

//  将你的对话框的HWND或者他的类的指针传到线程函数中执行。

//  你是在一个线程中调用GetDlgItem,这里的GetDlgItem是一个API,而不是CWnd的成员函数,

//  而这个API的参数有两个,不是一个,你可以用这个API,

//  方法是:GetDlgItem(对话框句柄,ID),然后用SetWindowText(控件HWND,字串)来完成这个工作.

//下面这样写就没问题了,两个版本都没有问题。

    HWND hwnd;

    CWnd* pWnd = CWnd::FromHandle(hwnd);

    if(pWnd)

    {

        pWnd-> GetDlgItem(IDC_STATIC_WAIT)->

SetWindowText(_T("正在登陆服务器,请稍候..."));

    }

//下面这里也应该加上_T(x),否则也会出错。

SetWindowText("正在登陆服务器,请稍候...");

//error C2664: CWnd::SetWindowTextW: 不能将参数1 从“const char [27]”转换为“LPCTSTR

//正确的应该是:

pWnd-> GetDlgItem(IDC_STATIC_WAIT)-> SetWindowText(_T("正在登陆服务器,请稍候..."));

 

//上面说明的情况是:代码存在错误在debug方式下可能会忽略而不被察觉到,

//  debug方式下数组越界也大多不会出错,

//  release中就暴露出来了,这个找起来就比较难了。

/*

总结:

DebugRelease不同的问题在刚开始编写代码时会经常发生,100%是因为你的代码书写错误而导致的,所以不要动不动就说系统问题或编译器问题,努力找找自己的原因才是根本。常常遇到这情况,经历过一次次的教训后就应该开始注意了。下面是几个避免的方面,即使没有这种问题也应注意一下:

1. 注意变量的初始化,尤其是指针变量,数组变量的初始化(很大的情况下另作考虑了)

2. 自定义消息及其他声明的标准写法

3. 使用调试宏时使用后最好注释掉

4. 尽量使用try - catch(...)

5. 尽量使用模块,不但表达清楚而且方便调试。

*/

 

 

 关于两个版本的问题,请参见转贴: http://blog.csdn.net/cobay/archive/2008/12/19/3555774.aspx

 

 

 

http://www.xdnf.cn/news/808615.html

相关文章:

  • 【玩转Linux】史上最详细的Linux命令大全和线上问题排查手册
  • 【网工】案例分析解题方法①
  • 木马病毒简介
  • WebRtc AEC核心算法之一:频域自适应滤波
  • python交流论坛推荐,python技术交流论坛
  • ucOSII知识整理
  • bootstrap导航条、分页导航
  • Hibernate常用网址
  • 电脑蓝屏怎么办 七大原因及解决办法来帮你
  • jsp 九大内置对象和其作用详解
  • [羊城杯 2020]Easyphp2 ---不会编程的崽
  • 44岁TVB女星转做地产怀孕6月仍带客
  • Java验证码(图片、字符串)生成工具
  • 什么是ip地址什么是网关_ip地址.网关.子掩码是什么?今天终于搞清楚了!
  • 短视频剪辑真的不难!50个新手必备剪辑技巧。
  • 安卓玩机搞机技巧综合资源-----“另类更新“偷渡”操作步骤 无需解锁bl 无需内侧用户【十三】
  • 找人改论文2023最新更新
  • 神经网络算法--文搞懂Tokenization(分词)
  • gateway网关的理解和使用
  • Mysql current_time,current_date()与now()区别
  • response.setHeader()的用法
  • C语言read函数和pread函数
  • 实训-永恒之蓝入侵系统
  • Linux:分享七款界面非常漂亮的Linux操作系统
  • Linux命令:traceroute命令(路由跟踪)
  • 实用在线词典
  • 一文搞懂Path环境变量
  • 【一】Java快速入门
  • CyanogenMOD移植教程]
  • Android SDK安装教程(超详细),从零基础入门到实战,从看这篇开始