什么时候应该用CAtlString而不是CComBSTR?

sadmeee 2013-09-04 10:20:20
同理,什么场景更适合CComBSTR而不是CAtlString?

我感觉CAtlString并没有特别的存在价值,它和CString以及标准c++的std::string的实现似乎很类似啊。
为什么要单独弄一个CAtlString出来呢? ATL里面已经有了CString这个东西了。

还请高手指点迷津!
...全文
214 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
redui 2013-09-05
  • 打赏
  • 举报
回复
1、无论是MFC还是ATL,他们的CString都是同一套代码,实际都是CAtlString 2、CComBSTR专用于COM。但是CComBSTR和CString互转都非常方便 3、别拿CString跟std::string比较,string除了跨平台方便,完全是个鸡肋,要什么功能没什么功能,而CString很强,要什么有什么。
  • 打赏
  • 举报
回复
引用 6 楼 redui 的回复:
[quote=引用 5 楼 akirya 的回复:] [quote=引用 4 楼 redui 的回复:] 1、无论是MFC还是ATL,他们的CString都是同一套代码,实际都是CAtlString 2、CComBSTR专用于COM。但是CComBSTR和CString互转都非常方便 3、别拿CString跟std::string比较,string除了跨平台方便,完全是个鸡肋,要什么功能没什么功能,而CString很强,要什么有什么。
std::string类本身功能有些多应该再砍掉一些 但std::string能跟algorithm的算法搭配,就足够强悍了。除了CString带的Format外,CString完全没法比啊。[/quote] 你真的看过CString的代码?[/quote] 当然看过了
redui 2013-09-05
  • 打赏
  • 举报
回复
引用 5 楼 akirya 的回复:
[quote=引用 4 楼 redui 的回复:] 1、无论是MFC还是ATL,他们的CString都是同一套代码,实际都是CAtlString 2、CComBSTR专用于COM。但是CComBSTR和CString互转都非常方便 3、别拿CString跟std::string比较,string除了跨平台方便,完全是个鸡肋,要什么功能没什么功能,而CString很强,要什么有什么。
std::string类本身功能有些多应该再砍掉一些 但std::string能跟algorithm的算法搭配,就足够强悍了。除了CString带的Format外,CString完全没法比啊。[/quote] 你真的看过CString的代码?
  • 打赏
  • 举报
回复
引用 4 楼 redui 的回复:
1、无论是MFC还是ATL,他们的CString都是同一套代码,实际都是CAtlString 2、CComBSTR专用于COM。但是CComBSTR和CString互转都非常方便 3、别拿CString跟std::string比较,string除了跨平台方便,完全是个鸡肋,要什么功能没什么功能,而CString很强,要什么有什么。
std::string类本身功能有些多应该再砍掉一些 但std::string能跟algorithm的算法搭配,就足够强悍了。除了CString带的Format外,CString完全没法比啊。
  • 打赏
  • 举报
回复
CAtlString 就是 CString呀
#ifndef _ATL_CSTRING_NO_CRT
typedef CStringT< wchar_t, StrTraitATL< wchar_t, ChTraitsCRT< wchar_t > > > CAtlStringW;
typedef CStringT< char, StrTraitATL< char, ChTraitsCRT< char > > > CAtlStringA;
typedef CStringT< TCHAR, StrTraitATL< TCHAR, ChTraitsCRT< TCHAR > > > CAtlString;
#else  // _ATL_CSTRING_NO_CRT
typedef CStringT< wchar_t, StrTraitATL< wchar_t > > CAtlStringW;
typedef CStringT< char, StrTraitATL< char > > CAtlStringA;
typedef CStringT< TCHAR, StrTraitATL< TCHAR > > CAtlString;
#endif  // _ATL_CSTRING_NO_CRT

#ifndef _AFX
typedef CAtlStringW CStringW;
typedef CAtlStringA CStringA;
typedef CAtlString CString;
#endif
Kaile 2013-09-04
  • 打赏
  • 举报
回复
没用过catlstring
fishion 2013-09-04
  • 打赏
  • 举报
回复
http://technet.microsoft.com/zh-cn/library/5bzxfsea(v=vs.71) 下面有说明了, CAtlString更像是CString,而CComBSTR是多是组件才使用的,是宽字节的

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧