主 题: 混用ATL MFC WTL的问题-CString的冲突 作 者: mc_ 回复次数: 3 发表时间: 2010-3-14 12:42:33 正文内容: MFC的定义是全局的,和ATL混用好像没啥问题,不过和WTL混在一起要出现CString的冲突,说是无法解析多个定义。 atlstr.h是这样定义的,也就是在混合MFC的情况下ATL里头的CString 的定义被取消掉了 #ifndef _AFX typedef CAtlStringW CStringW; typedef CAtlStringA CStringA; typedef CAtlString CString; #endif afxstr.h是这样定义的 typedef ATL::CStringT< wchar_t, StrTraitMFC< wchar_t > > CStringW; typedef ATL::CStringT< char, StrTraitMFC< char > > CStringA; typedef ATL::CStringT< TCHAR, StrTraitMFC< TCHAR > > CString; 这两种CString肯定是一回事,不过为了顺利使用WTL,还是需要ATL名称空间里的ATL::CString,虽然可以使用ATL::CAtlString,WTL里面肯定不会认CAtlString 我在stdafx.h里头试图用#undef CString 去掉全局的MFC CString,没有成功, 用#undef _AFX 使用在ATL头文件之前定义一下,也没成功 问哈大家有啥子好办法?MFC可否被定义成名称空间namespace,不过试了下错误一大堆 |
回复人: carr123 | 2010-3-14 23:53:32 |
回复人: mc_ | 2010-3-14 23:57:40 |
回复人: mc_ | 2010-3-15 0:01:23 |
关键在这两个声明上
#undef __ATLSTR_H__
#define _ATL_TMP_NO_CSTRING //本人用的是WTL81_9127