zoukankan      html  css  js  c++  java
  • WTL学习:在DDX_TEXT(controlID, variable)中第二个参数是CString的问题(cannot convert parameter 2 from 'WTL::CString' to 'LPTSTR')

    原文地址:http://www.cppblog.com/tiger7/articles/WTL-DDX_TEXT.html

    在学习WTL中的DDX_XXX时,写入DDX_MAP时,

    BEGIN_DDX_MAP(CMainDlg)
        DDX_CONTROL(IDC_EDIT, m_wndEdit)
        
    DDX_TEXT(IDC_EDIT, m_sEditContents)
    END_DDX_MAP()

    其中红色部分编译时碰到一个问题,提示语是:“ error C2664: 'BOOL WTL::CWinDataExchange<T>::DDX_Text(UINT,LPTSTR,int,BOOL,BOOL,int)' : cannot convert parameter 2 from 'WTL::CString' to 'LPTSTR'”,直接在google上搜索这个问题,基本上没有看到解决方法,最后只好去查找源码,发现有处定义为:

     

    #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
        BOOL DDX_Text(UINT nID, _CSTRING_NS::CString
    & strText, int /*cbSize*/, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)
    {
    .
    }

     

    因为平时在查看参考资料时,看到的都是告诉我们要使用CString要先定义下“#define _ATL_USE_CSTRING”,前面都没有写过这个定义,马上在google上搜索下“_WTL_USE_CSTRING”,这下好了,终于找到解答了:

     

        ATL3的环境下,#define  _WTL_USE_CSTRING 这个定义其实非常必要。如果不定义这个直接包含atlmisc.h,这样只是你的程序知道用CString,WTL的库并不知道。这个时候,使用DDX_TEXT就会出现问题。

    最后在stdafx.h中,将“_ATL_USE_CSTRING”改为“_WTL_USE_CSTRING”,在编译,程序终于正常了~~~~~~~

     

    非原文内容后记:使用CString类时,包含atlmisc.h这个头文件即可

  • 相关阅读:
    C语言数组和字符串函数
    C语言控制语句
    C语言输入输出函数
    C语言运算符
    C语言数据类型
    嵌入式开发基础知识
    VI编辑器的使用
    Linux文件系统和目录相关命令
    前段之必学(转载)
    26个高效工作的小技巧(转载)
  • 原文地址:https://www.cnblogs.com/guobbs/p/3619118.html
Copyright © 2011-2022 走看看