WTL学习:在DDX_TEXT(controlID, variable)中第二个参数是CString的问题(cannot convert parameter 2 from 'WTL::CString' to 'LPTSTR')

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


posted on 2011-06-10 11:01 tiger7 阅读(2000) 评论(3)  编辑 收藏 引用 所属分类: VC

评论

# re: WTL学习:在DDX_TEXT(controlID, variable)中第二个参数是CString的问题(cannot convert parameter 2 from 'WTL::CString' to 'LPTSTR') 2012-02-08 16:53 freeDim

确实如此。。。
没有_WTL_USE_CSTRING默认的就调用的是LPTSTR参数的版本,
谢谢文章的帮助。  回复  更多评论   

# re: WTL学习:在DDX_TEXT(controlID, variable)中第二个参数是CString的问题(cannot convert parameter 2 from 'WTL::CString' to 'LPTSTR')[未登录] 2012-07-18 11:50

楼主是按照MFC程序员的WTL开发指南上的代码在做吗?如果是的话,我想问个问题,就是在指南的这一节,我照着写的代码,也按照楼主的方法解决了DDX_TEXT的问题,可是点击OK按钮后List没有任何变化,楼主能共享一下你的代码吗。hao1126@163.com谢了。  回复  更多评论   

# re: WTL学习:在DDX_TEXT(controlID, variable)中第二个参数是CString的问题(cannot convert parameter 2 from 'WTL::CString' to 'LPTSTR') 2012-07-22 16:58 tiger7

@陈
不好意思,我没有找到了,应该是在我原来公司到电脑上,暂时帮不了你。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

导航

统计

公告

welcome to tiger's blog.

常用链接

留言簿

文章分类

文章档案

搜索

最新评论