CComSafeArray クラス
このクラスは、SAFEARRAY 構造体のラッパー クラスです。
template <
typename T,
VARTYPE _vartype = _ATL_AutomationType< T >::type
>
class CComSafeArray
パラメーター
- T
配列に格納されるデータの型。
メンバー
パブリック コンストラクター
名前 |
説明 |
---|---|
コンストラクターです。 |
|
デストラクターです。 |
パブリック メソッド
名前 |
説明 |
---|---|
1 つ以上の要素または 1 つの SAFEARRAY 構造体を CComSafeArray に追加します。 |
|
SAFEARRAY 構造体を CComSafeArray オブジェクトにアタッチします。 |
|
SAFEARRAY 構造体の内容を CComSafeArray オブジェクトにコピーします。 |
|
CComSafeArray オブジェクトのコピーを作成します。 |
|
CComSafeArray オブジェクトを作成します。 |
|
CComSafeArray オブジェクトを破棄します。 |
|
CComSafeArray のオブジェクトの SAFEARRAY をデタッチします。 |
|
次元配列から一つの要素を取得します。 |
|
配列の要素数を返します。 |
|
配列の次元数を返します。 |
|
配列の次元の下限を返します。 |
|
m_psa データ メンバーのアドレスを返します。 |
|
配列に格納されているデータの型を返します。 |
|
配列の各次元の上限を返します。 |
|
CComSafeArray のオブジェクトのサイズを変更できる場合はテスト。 |
|
多次元配列から一つの要素を取得します。 |
|
多次元配列の要素の値を設定します。 |
|
CComSafeArray のオブジェクトのサイズが変更されます。 |
|
次元配列の要素の値を設定します。 |
パブリック演算子
名前 |
説明 |
---|---|
SAFEARRAY のポインターにキャスト。 |
|
配列から要素を取得します。 |
|
代入演算子。 |
パブリック データ メンバー
名前 |
説明 |
---|---|
このデータ メンバーは SAFEARRAY の構造体のアドレスを保持します。 |
解説
CComSafeArray には、SAFEARRAY Data Type クラスのラッパーが用意されており、サポートされる VARIANT 型の 1 次元配列および多次元配列を簡単に作成したり、管理したりできます。
CComSafeArray により、プロセス間での配列の受け渡しが単純化され、配列インデックスの値を上限と下限に対してチェックすることでセキュリティがさらに向上します。
CComSafeArray の下限は任意のユーザー定義値で開始できますが、C++ を通じてアクセスされる配列の下限は 0 にする必要があります。Visual Basic などの他の言語では、別の境界値 (たとえば、-10 ~ 10) を使用できます。
CComSafeArray オブジェクトは、CComSafeArray::Create を使用して作成し、CComSafeArray::Destroy を使用して削除します。
CComSafeArray には、VARIANT データ型の次のサブセットを格納できます。
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 |
10 進ポインター |
VT_VARIANT |
バリアント ポインター |
VT_CY |
通貨型 (Currency) |
必要条件
ヘッダー : 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]);
}
}