在學習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”,在編譯,程序終于正常了~~~~~~~