在学习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”,在编译,程序终于正常了~~~~~~~