在Windows编程中,MFC(Microsoft Foundation Classes)库为开发者提供了许多便利,特别是在处理日期、字符串和字节数组时。MFC通过其类封装自动处理内存分配和类型转换,从而简化了程序员的工作。然而,这种简化带来的副作用是必须随组件一起分发MFC DLL。本文将重点讨论在ATL组件中使用字节数组时遇到的问题,以及如何避免对MFC的依赖。
如果不在ATL组件中包含MFC支持,那么显然无法使用MFC的CByteArray。因此,编写了CCOMByteArray类,以提供MFC的CByteArray的功能,但无需依赖MFC。请注意,目前没有为内存分配函数包含异常处理。目前使用ATLASSERT宏来捕获任何内存分配错误,但这些在Release模式下会编译掉。这个功能以及性能改进将在未来的版本中添加。
当前版本的CCOMByteArray包括以下功能。请注意,如果下载的CCOMByteArray类中有任何未在以下文本中列出的函数,它们被认为是未记录的,因此可能也未经测试:
CCOMByteArray()
- 构造一个空的字节数组。
CCOMByteArray(BYTE*, UINT)
- 从指向BYTE数组的指针构造CCOMByteArray对象。
CCOMByteArray(BSTR&)
- 从二进制字符串(即BSTR)构造CCOMByteArray对象。
CCOMString(BSTR)
- 从BSTR构造CCOMByteArray对象。
GetSize() const
- 返回字节数组的大小。
GetUpperBound() const
- 返回字节数组的上界(即大小减一)。
SetSize(UINT, UINT)
- 设置数组的大小以及增长因子。
RemoveAll()
- 移除数组中的所有元素。
FreeExtra()
- 释放数组当前未使用的任何额外分配的内存。
GetAt(UINT) const
- 返回指定位置的字节。
ElementAt(UINT)
- 返回指定位置的字节的引用。
SetAt(BYTE, UINT)
- 将元素设置为指定位置的指定字节值。
GetData() const
- 返回CCOMByteArray中包含的数组的指针。
Append(BYTE)
- 将指定的字节添加到现有数组中。
Append(const CCOMByteArray&)
- 将指定的CCOMByteArray添加到现有数组中。
Append(BYTE*, UINT)
- 将指定的BYTE*数组添加到现有数组中。
Append(BSTR&)
- 将指定的二进制字符串添加到现有数组中。
operator+=(CCOMByteArray&)
- 与Append(CCOMByteArray&)具有相同的功能(见上文)。
operator+=(BYTE&)
- 与Append(BYTE&)具有相同的功能(见上文)。
operator+=(BSTR&)
- 与Append(BSTR&)具有相同的功能(见上文)。
InsertAt(UINT, BYTE, UINT)
- 在指定位置插入指定字节,指定次数。
InsertAt(UINT, CCOMByteArray&)
- 从指定位置开始插入指定的CCOMByteArray。