ATL 的非 MFC 字符串类






4.20/5 (11投票s)
2000年3月28日

266968

2604
用于 ATL 组件的非 MFC 字符串类
引言
在编写 ATL 组件时,我发现 Windows 程序员最难克服的障碍之一就是对 MFC 库的依赖。对于日期和字符串,MFC 通过其类封装处理内存分配和类型转换,从而简化了程序员的工作。然而,这种简化也付出了分发 MFC DLL 的代价。
本文重点讨论与在 ATL 组件中使用字符串相关的问题。如果不在 ATL 组件中包含 MFC 支持,显然就无法使用 CString
。已经有几篇文章讨论了这个问题。我读过的其中一些是:
NonMFC:CString
(发布于 www.worldofatl.com) - 本文提供了一个基于标准模板库 (STL) 的新 CString 类。Add MFC's CString to ATL w/ No MFC dependencies
(作者 K. Shane Triem (www.codeguru.com)) - 本文演示了如何使用 Visual Studio 宏从 MFC 库中提取CString
类源代码,然后将其用于 ATL 组件。
CCOMString
尽管这两篇文章都是 MFC CString
类的可行替代方案,但我想要一个可以在 ANSI 和 Unicode 下编译,并且没有任何依赖(无论是 MFC 还是 STL)的类。我的选择是编写一个名为 CCOMString 的字符串处理类,该类完全基于 Visual C++ 的 TCHAR
数据类型。
TCHAR
数据类型定义如下:
- 当你的程序中定义了
_MBCS
时,它是一个char
。 - 当你的程序中定义了
_UNICODE
时,它是一个wchar_t
。 - 当你的程序中既没有定义
_MBCS
也没有定义_UNICODE
时,它是一个char
。
因此,通过使用 TCHAR
数据类型,CCOMString
与 ANSI 和 Unicode 编译模式兼容。请注意,该类目前有一个限制:它目前不包含内存分配函数的异常处理。我目前使用 ATLASSERT
宏来捕获任何内存分配错误,但这些在 Release 模式下会编译掉(我仍在研究一种在不增加异常处理开销的情况下处理这些错误的方法)。
CCOMString
的当前版本包含以下功能。请注意,如果您下载的 CCOMString
类中包含的任何函数未在下文列出,则它们被视为未记录,因此可能也未经测试。
构造函数
CCOMString()
- 构造一个空字符串。CCOMString(CCOMString&)
- 从另一个 CCOMString
构造字符串。CCOMString(LPCTSTR)
- 从 LPCTSTR
(即 const TCHAR*
) 构造字符串。CCOMString(BSTR)
- 从 BSTR
构造字符串。CCOMString(TCHAR, int)
- 用指定的字符重复指定的次数构造字符串。赋值操作
operator=(CCOMString&)
- 将另一个 CCOMString
对象复制到 CCOMString
对象。operator=(LPCTSTR)
- 将 LPCTSTR
复制到 CCOMString
对象。operator=(BSTR)
- 将 BSTR
复制到 CCOMString
对象。operator LPCTSTR()
- 从 CCOMString
对象返回一个 const TCHAR*
。TCHAR* GetString()
- 获取 CCOMString
对象中包含的字符串的指针。BSTR AllocSysString()
- 从 CCOMString
对象分配一个 BSTR
。串联
<code>operator+=(CCOMString&)
- 将一个 CCOMString
对象连接到 CCOMString
对象末尾。operator+=(LPCTSTR)
- 将一个 const TCHAR*
连接到 CCOMString
对象末尾。operator+=(BSTR)
- 将一个 BSTR
连接到 CCOMString
对象末尾。operator+=(TCHAR)
- 将一个 TCHAR
连接到 CCOMString
对象末尾。operator+(CCOMString&, CCOMString&)
- 将两个 CCOMString
对象连接在一起。operator+(CCOMString&, LPCTSTR)
- 将一个 CCOMString
对象和一个 const TCHAR*
连接在一起。operator+(LPCTSTR, CCOMString&)
- 将一个 const TCHAR*
和一个 CCOMString
对象连接在一起。operator+(CCOMString&, BSTR)
- 将一个 CCOMString
对象和一个 BSTR
连接在一起。operator+(BSTR, CCOMString&)
- 将一个 BSTR
和一个 CCOMString
对象连接在一起。字符串作为数组的访问器
GetLength()
- 以整数形式返回 CCOMString
字符串的长度。IsEmpty()
- 根据 CCOMString
字符串是否为空,返回 TRUE 或 FALSE。Empty()
- 将 CCOMString
字符串设置为一个空字符串(即 _T(""))。GetAt(int)
- 返回指定位置 CCOMString
字符串中的一个 TCHAR
字符。operator[] (int)
- 功能与 GetAt(int)
相同。SetAt(int, TCHAR)
- 将 CCOMString
字符串指定位置的字符设置为指定的字符。转换
MakeUpper()
- 将 CCOMString
字符串转换为全大写。MakeLower()
- 将 CCOMString
字符串转换为全小写。MakeReverse()
- 反转 CCOMString
字符串中字符的顺序。TrimLeft()
- 移除 CCOMString
字符串左侧的所有空格。TrimRight()
- 移除 CCOMString
字符串右侧的所有空格。搜索
Find(TCHAR)
- 返回指定字符在 CCOMString
字符串中的第一个位置。Find(TCHAR, int nStart)
- 返回指定字符在 nStart 位置之后的第一个位置。Find(LPCTSTR lpszSub)
- 返回指定字符串在 CCOMString
字符串中的第一个位置。Find(LPCTSTR lpszSub, int nStart)
- 返回指定字符串在 nStart 位置之后的第一个位置。提取
Mid(int)
- 返回一个 CCOMString
对象,其中包含从指定位置到 CCOMString
字符串末尾的字符。Mid(int, int)
- 返回一个 CCOMString
对象,其中包含从指定位置开始,长度为指定长度的 CCOMString
字符串的字符。Left(int nCount)
- 返回 CCOMString
字符串左侧开始的 nCount 个字符。Right(int nCount)
- 返回 CCOMString
字符串右侧开始的 nCount 个字符。替换
Replace(TCHAR chOld, TCHAR chNew)
- 将 CCOMString
字符串中的所有 chOld 字符替换为 chNew 字符。Replace(LPCTSTR lpszOld, LPCTSTR lpszNew)
- 将 CCOMString
字符串中的所有 lpszOld 字符串替换为 lpszNew 字符串。比较
Compare(CCOMString&)
- 将当前 CCOMString
字符串与指定的 CCOMString
字符串进行比较,如果相等则返回零,如果不相等则返回非零。此比较区分大小写。Compare(LPCTSTR)
- 将当前 CCOMString
字符串与指定的 const TCHAR*
进行比较,如果相等则返回零,如果不相等则返回非零。此比较区分大小写。operator==(const CCOMString&, const CCOMString&)
- 功能与 Compare(CCOMString&)
相同。operator==(const CCOMString&, LPCTSTR)
- 功能与 Compare(LPCTSTR)
相同。operator==(LPCTSTR, const CCOMString&)
- 功能与 Compare(LPCTSTR)
相同。operator!=(const CCOMString&, const CCOMString&)
- 将当前 CCOMString
字符串与指定的 CCOMString
字符串进行比较,如果不相等则返回零,如果相等则返回非零。此比较区分大小写。operator!=(const CCOMString&, LPCTSTR)
- 将当前 CCOMString
字符串与指定的 const TCHAR*
进行比较,如果不相等则返回零,如果相等则返回非零。此比较区分大小写。operator!=(LPCTSTR, const CCOMString&)
- 功能与 operator !=(const CCOMString&, LPCTSTR)
相同。CompareNoCase(CCOMString&)
- 将当前 CCOMString
字符串与指定的 CCOMString
字符串进行比较,如果相等则返回零,如果不相等则返回非零。此比较不区分大小写。CompareNoCase(LPCTSTR)
- 将当前 CCOMString
字符串与指定的 const TCHAR*
进行比较,如果相等则返回零,如果不相等则返回非零。此比较不区分大小写。格式化
Format(LPCTSTR, ...)
- 类似 C 函数 printf()
格式化字符串。历史
2000年6月28日 - 源代码内存泄漏修复
2000年8月12日 - 更新了源代码 ZIP 文件