次の方法で共有


CComSafeArray クラス

このクラスは、SAFEARRAY 構造体のラッパー クラスです。

template <
   typename T,
   VARTYPE _vartype = _ATL_AutomationType< T >::type
>
class CComSafeArray

パラメーター

  • T
    配列に格納されるデータの型。

メンバー

パブリック コンストラクター

名前

説明

CComSafeArray::CComSafeArray

コンストラクターです。

CComSafeArray::~CComSafeArray

デストラクターです。

パブリック メソッド

名前

説明

CComSafeArray::Add

1 つ以上の要素または 1 つの SAFEARRAY 構造体を CComSafeArray に追加します。

CComSafeArray::Attach

SAFEARRAY 構造体を CComSafeArray オブジェクトにアタッチします。

CComSafeArray::CopyFrom

SAFEARRAY 構造体の内容を CComSafeArray オブジェクトにコピーします。

CComSafeArray::CopyTo

CComSafeArray オブジェクトのコピーを作成します。

CComSafeArray::Create

CComSafeArray オブジェクトを作成します。

CComSafeArray::Destroy

CComSafeArray オブジェクトを破棄します。

CComSafeArray::Detach

CComSafeArray のオブジェクトの SAFEARRAY をデタッチします。

CComSafeArray::GetAt

次元配列から一つの要素を取得します。

CComSafeArray::GetCount

配列の要素数を返します。

CComSafeArray::GetDimensions

配列の次元数を返します。

CComSafeArray::GetLowerBound

配列の次元の下限を返します。

CComSafeArray::GetSafeArrayPtr

m_psa データ メンバーのアドレスを返します。

CComSafeArray::GetType

配列に格納されているデータの型を返します。

CComSafeArray::GetUpperBound

配列の各次元の上限を返します。

CComSafeArray::IsSizable

CComSafeArray のオブジェクトのサイズを変更できる場合はテスト。

CComSafeArray::MultiDimGetAt

多次元配列から一つの要素を取得します。

CComSafeArray::MultiDimSetAt

多次元配列の要素の値を設定します。

CComSafeArray::Resize

CComSafeArray のオブジェクトのサイズが変更されます。

CComSafeArray::SetAt

次元配列の要素の値を設定します。

パブリック演算子

名前

説明

CComSafeArray::operator LPSAFEARRAY

SAFEARRAY のポインターにキャスト。

CComSafeArray::operator []

配列から要素を取得します。

CComSafeArray::operator =

代入演算子。

パブリック データ メンバー

名前

説明

CComSafeArray::m_psa

このデータ メンバーは 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]);
   }   
}

参照

関連項目

CComSafeArray::Create

CComSafeArray::Destroy

その他の技術情報

SAFEARRAY Data Type

ATL クラスの概要