CComSafeArray选件类
此选件类是 SAFEARRAY 结构的包装。
template <
typename T,
VARTYPE _vartype = _ATL_AutomationType< T >::type
>
class CComSafeArray
参数
- T
在数组中存储的数据类型。
成员
公共构造函数
名称 |
说明 |
---|---|
构造函数。 |
|
该析构函数。 |
公共方法
名称 |
说明 |
---|---|
添加一个或多个元素或一 SAFEARRAY 结构,以便 CComSafeArray。 |
|
附加 SAFEARRAY 结构。CComSafeArray 对象。 |
|
复制 SAFEARRAY 结构的内容复制到 CComSafeArray 对象。 |
|
创建 CComSafeArray 对象的一个副本。 |
|
创建一个 CComSafeArray 对象。 |
|
销毁 CComSafeArray 对象。 |
|
分离 CComSafeArray 对象的 SAFEARRAY。 |
|
从一维数组检索一个元素。 |
|
返回元素数。数组的。 |
|
返回中的维数。数组的。 |
|
返回数组的特定维度的下限。 |
|
返回 m_psa 数据成员的地址。 |
|
返回数组中存储的数据的类型。 |
|
返回数组的所有维度的上限。 |
|
如果 CComSafeArray 对象的大小进行调整,测试。 |
|
从多维数组检索一个元素。 |
|
设置一个元素的值在多维数组的。 |
|
调整 CComSafeArray 对象。 |
|
设置一个元素的值在一维数组。 |
公共运算符
名称 |
说明 |
---|---|
将值转换为 SAFEARRAY 指针。 |
|
从数组检索元素。 |
|
赋值运算符。 |
公共数据成员
名称 |
说明 |
---|---|
此数据成员保存 SAFEARRAY 结构的地址。 |
备注
CComSafeArray 为 SAFEARRAY Data Type 选件类提供一个包装,使其成为简单的内容创建和管理单和多维数组几乎任何变量支持的类型。
此外CComSafeArray 简化之间传递数组通过检查数组索引值处理和提供额外的安全上限和下限。
CComSafeArray 的下限开始在任何用户定义的值;但是,通过C++捕获的数组应使用下限0。其他语言(如Visual Basic能使用其他绑定值(例如,-10到10)。
使用 CComSafeArray::Create 创建 CComSafeArray 对象和 CComSafeArray::Destroy 删除它。
CComSafeArray 可以包含不同数据类型的以下部分:
VARTYPE |
说明 |
---|---|
VT_I1 |
char |
VT_I2 |
short |
VT_I4 |
int |
VT_I4 |
long |
VT_I8 |
longlong |
VT_UI1 |
byte |
VT_UI2 |
ushort |
VT_UI4 |
uint |
VT_UI4 |
ulong |
VT_UI8 |
ulonglong |
VT_R4 |
float |
VT_R8 |
double |
VT_DECIMAL |
十进制指针 |
VT_VARIANT |
不同的指针 |
VT_CY |
货币数据类型 |
要求
Header: atlsafe.h
示例
// Create a multidimensional array,
// then write and read elements
// Define an array of character pointers
CComSafeArray<char> *pSar;
char cElement;
char cTable[2][3] = {'A','B','C','D','E','F'};
// Declare the variable used to store the
// array indexes
LONG aIndex[2];
// Define the array bound structure
CComSafeArrayBound bound[2];
bound[0].SetCount(3);
bound[0].SetLowerBound(0);
bound[1].SetCount(3);
bound[1].SetLowerBound(0);
// Create a new 2 dimensional array
// each dimension size is 3
pSar = new CComSafeArray<char>(bound,2);
// Use MultiDimSetAt to store characters in the array
for (int x = 0; x < 2; x++)
{
for (int y = 0; y < 3; y++)
{
aIndex[0] = x;
aIndex[1] = y;
HRESULT hr = pSar->MultiDimSetAt(aIndex,cTable[x][y]);
ATLASSERT(hr == S_OK);
}
}
// Use MultiDimGetAt to retrieve characters in the array
for (int x = 0; x < 2; x++)
{
for (int y = 0; y < 3; y++)
{
aIndex[0]=x;
aIndex[1]=y;
HRESULT hr = pSar->MultiDimGetAt(aIndex,cElement);
ATLASSERT(hr == S_OK);
ATLASSERT(cElement == cTable[x][y]);
}
}