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这个头文件即可

原文地址:https://www.cnblogs.com/guobbs/p/3619118.html