CComSafeArray 類別
這個類別是 SAFEARRAY 結構的包裝函式。
template <
typename T,
VARTYPE _vartype = _ATL_AutomationType< T >::type
>
class CComSafeArray
參數
- T
在陣列中儲存的資料型別。
Members
公用建構函式
名稱 |
描述 |
---|---|
建構函式。 |
|
解構函式。 |
公用方法
名稱 |
描述 |
---|---|
將一或多個元素或一 SAFEARRAY 結構,為 CComSafeArray。 |
|
附加 SAFEARRAY 結構。 CComSafeArray 物件。 |
|
複製 SAFEARRAY 結構的內容插入 CComSafeArray 物件。 |
|
建立 CComSafeArray 物件的複本。 |
|
建立 CComSafeArray 物件。 |
|
終結 CComSafeArray 物件。 |
|
中斷連結 CComSafeArray 物件的 SAFEARRAY 。 |
|
從一維陣列擷取單一項目。 |
|
傳回項目的參數數目等於陣列中的。 |
|
傳回維度的參數數目等於陣列中的。 |
|
傳回陣列中的某個特定維度的下限。 |
|
傳回 m_psa 資料成員的位址。 |
|
傳回陣列中儲存的資料型別。 |
|
傳回陣列的所有維度的上限 (Upper Bound)。 |
|
測試,如果 CComSafeArray 物件可調整大小。 |
|
從多維陣列擷取單一項目。 |
|
設定項目的值在多維陣列。 |
|
調整大小 CComSafeArray 物件。 |
|
設定項目的值在一維陣列中。 |
公用運算子
名稱 |
描述 |
---|---|
將值轉型為 SAFEARRAY 指標。 |
|
從陣列中擷取項目。 |
|
指派運算子。 |
公用資料成員
名稱 |
描述 |
---|---|
這個資料成員保存 SAFEARRAY 結構的位址。 |
備註
CComSafeArray 為 SAFEARRAY Data Type 類別提供包裝函式,使其成為的簡單事宜建立和管理單一和多維度陣列幾乎任何 Variant 支援的型別。
此外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]);
}
}