WTL學(xué)習(xí):在DDX_TEXT(controlID, variable)中第二個(gè)參數(shù)是CString的問(wèn)題(cannot convert parameter 2 from 'WTL::CString' to 'LPTSTR')
在學(xué)習(xí)WTL中的DDX_XXX時(shí),寫(xiě)入DDX_MAP時(shí),
BEGIN_DDX_MAP(CMainDlg)
DDX_CONTROL(IDC_EDIT, m_wndEdit)
DDX_TEXT(IDC_EDIT, m_sEditContents)
END_DDX_MAP()其中紅色部分編譯時(shí)碰到一個(gè)問(wèn)題,提示語(yǔ)是:“ error C2664: 'BOOL WTL::CWinDataExchange<T>::DDX_Text(UINT,LPTSTR,int,BOOL,BOOL,int)' : cannot convert parameter 2 from 'WTL::CString' to 'LPTSTR'”,直接在google上搜索這個(gè)問(wèn)題,基本上沒(méi)有看到解決方法,最后只好去查找源碼,發(fā)現(xiàn)有處定義為:
#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)
{
.
}因?yàn)槠綍r(shí)在查看參考資料時(shí),看到的都是告訴我們要使用CString要先定義下“#define _ATL_USE_CSTRING”,前面都沒(méi)有寫(xiě)過(guò)這個(gè)定義,馬上在google上搜索下“_WTL_USE_CSTRING”,這下好了,終于找到解答了:
ATL3的環(huán)境下,#define _WTL_USE_CSTRING 這個(gè)定義其實(shí)非常必要。如果不定義這個(gè)直接包含atlmisc.h,這樣只是你的程序知道用CString,WTL的庫(kù)并不知道。這個(gè)時(shí)候,使用DDX_TEXT就會(huì)出現(xiàn)問(wèn)題。最后在stdafx.h中,將“_ATL_USE_CSTRING”改為“_WTL_USE_CSTRING”,在編譯,程序終于正常了~~~~~~~
posted on 2011-06-10 11:01 tiger7 閱讀(2035) 評(píng)論(3) 編輯 收藏 引用 所屬分類: VC