COleSafeArray クラス
任意の型および次元の配列を扱うクラスです。
構文
class COleSafeArray : public tagVARIANT
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
COleSafeArray::COleSafeArray | COleSafeArray オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
COleSafeArray::AccessData | 配列データへのポインターを取得します。 |
COleSafeArray::AllocData | 配列のメモリを割り当てます。 |
COleSafeArray::AllocDescriptor | セーフ配列記述子のメモリを割り当てます。 |
COleSafeArray::Attach | 既存の VARIANT 配列を COleSafeArray オブジェクトに制御します。 |
COleSafeArray::Clear | 基になる VARIANT 内のすべてのデータを解放します。 |
COleSafeArray::Copy | 既存の配列のコピーを作成します。 |
COleSafeArray::Create | 安全な配列を作成します。 |
COleSafeArray::CreateOneDim | 1 次元 COleSafeArray オブジェクトを作成します。 |
COleSafeArray::D estroy | 既存の配列を破棄します。 |
COleSafeArray::D estroyData | セーフ配列内のデータを破棄します。 |
COleSafeArray::D estroyDescriptor | セーフ配列の記述子を破棄します。 |
COleSafeArray::D etach | データが解放されないように、 COleSafeArray オブジェクトから VARIANT 配列をデタッチします。 |
COleSafeArray::GetByteArray | セーフ配列の内容を CByteArray にコピーします。 |
COleSafeArray::GetDim | 配列内の次元数を返します。 |
COleSafeArray::GetElement | セーフ配列の 1 つの要素を取得します。 |
COleSafeArray::GetElemSize | セーフ配列内の 1 つの要素のサイズをバイト単位で返します。 |
COleSafeArray::GetLBound | セーフ配列の次元の下限を返します。 |
COleSafeArray::GetOneDimSize | 1 次元の COleSafeArray オブジェクト内の要素の数を返します。 |
COleSafeArray::GetUBound | セーフ配列の次元の上限を返します。 |
COleSafeArray::Lock | 配列のロックカウントをインクリメントし、配列記述子内の配列データへのポインターを配置します。 |
COleSafeArray::P trOfIndex | インデックス付き要素へのポインターを返します。 |
COleSafeArray::P utElement | 1 つの要素を配列に割り当てます。 |
COleSafeArray::Redim | セーフ配列の最下位 (右端) の境界を変更します。 |
COleSafeArray::ResizeOneDim | 1 次元の COleSafeArray オブジェクト内の要素の数を変更します。 |
COleSafeArray::UnaccessData | 配列のロックカウントをデクリメントし、 AccessData によって取得されたポインターを無効にします。 |
COleSafeArray::Unlock | 解放またはサイズ変更できるように、配列のロック数をデクリメントします。 |
パブリック演算子
名前 | 説明 |
---|---|
COleSafeArray::operator LPCVARIANT | COleSafeArray オブジェクトの基になるVARIANT 構造体にアクセスします。 |
COleSafeArray::operator LPVARIANT | COleSafeArray オブジェクトの基になるVARIANT 構造体にアクセスします。 |
COleSafeArray::operator = | 値を COleSafeArray オブジェクト (SAFEARRAY 、 VARIANT 、 COleVariant 、または配列 COleSafeArray ) にコピーします。 |
COleSafeArray::operator == | 2 つのバリアント配列 (SAFEARRAY 、 VARIANT 、 COleVariant 、または COleSafeArray 配列) を比較します。 |
COleSafeArray::operator << |
COleSafeArray オブジェクトの内容をダンプ コンテキストに出力します。 |
解説
COleSafeArray
は OLE VARIANT
構造体から派生します。 OLE SAFEARRAY
メンバー関数は、 COleSafeArray
だけでなく、バイトの 1 次元配列用に特別に設計されたメンバー関数のセットを使用して使用できます。
継承階層
tagVARIANT
COleSafeArray
要件
ヘッダー : afxdisp.h
COleSafeArray::AccessData
配列データへのポインターを取得します。
void AccessData(void** ppvData);
パラメーター
ppvData
配列データへのポインターへのポインター。
解説
エラーが発生すると、関数は CMemoryException または COleException をスローします。
例
void CMainFrame::Sort(VARIANT* vArray)
{
COleSafeArray sa;
BSTR* pbstr;
TCHAR buf[1024];
LONG cElements, lLBound, lUBound;
//needed for OLE2T macro below, include afxpriv.h
USES_CONVERSION;
// Type check VARIANT parameter. It should contain a BSTR array
// passed by reference. The array must be passed by reference it is
// an in-out-parameter.
if (V_VT(vArray) != (VT_ARRAY | VT_BSTR))
{
AfxThrowOleDispatchException(1001,
_T("Type Mismatch in Parameter. Pass a string array by reference"));
}
// clears data in sa and copies the variant data into sa
sa.Attach(*vArray);
// Check that array is 1 dimensional
if (sa.GetDim() != 1)
{
AfxThrowOleDispatchException(1002,
_T("Type Mismatch in Parameter. Pass a one-dimensional array"));
}
try
{
// Get array bounds.
sa.GetLBound(1, &lLBound);
sa.GetUBound(1, &lUBound);
// Get a pointer to the elements of the array
// and increments the lock count on the array
sa.AccessData((LPVOID*)& pbstr);
//get no. of elements in array
cElements = lUBound - lLBound + 1;
for (int i = 0; i < cElements; i++)
{
//output the elements of the array
_stprintf_s(buf, 1024, _T("[%s]\n"), OLE2T(pbstr[i]));
OutputDebugString(buf);
}
//decrement lock count
sa.UnaccessData();
}
catch (COleException* pEx)
{
AfxThrowOleDispatchException(1003,
_T("Unexpected Failure in FastSort method"));
pEx->Delete();
}
}
COleSafeArray::AllocData
セーフ配列のメモリを割り当てます。
void AllocData();
解説
エラーが発生すると、関数は CMemoryException または COleException をスローします。
COleSafeArray::AllocDescriptor
セーフ配列の記述子にメモリを割り当てます。
void AllocDescriptor(DWORD dwDims);
パラメーター
dwDims
セーフ配列内の次元の数。
解説
エラーが発生すると、関数は CMemoryException または COleException をスローします。
COleSafeArray::Attach
既存の VARIANT
配列内のデータを COleSafeArray
オブジェクトに制御します。
void Attach(VARIANT& varSrc);
パラメーター
varSrc
VARIANT
オブジェクト。 varSrc パラメーターには VARTYPE VT_ARRAYが必要です。
解説
ソース VARIANT
の型は VT_EMPTY に設定されます。 この関数は、現在の配列データ (存在する場合) をクリアします。
例
COleSafeArray::AccessData の例を参照してください。
COleSafeArray::Clear
セーフ配列をクリアします。
void Clear();
解説
この関数は、オブジェクトの VARTYPE
をVT_EMPTYに設定することで、安全な配列をクリアします。 現在の内容が解放され、配列が解放されます。
COleSafeArray::COleSafeArray
COleSafeArray
オブジェクトを構築します。
COleSafeArray();
COleSafeArray(
const SAFEARRAY& saSrc,
VARTYPE vtSrc);
COleSafeArray(
LPCSAFEARRAY pSrc,
VARTYPE vtSrc);
COleSafeArray(const COleSafeArray& saSrc);
COleSafeArray(const VARIANT& varSrc);
COleSafeArray(LPCVARIANT pSrc);
COleSafeArray(const COleVariant& varSrc);
パラメーター
saSrc
新しいCOleSafeArray
オブジェクトにコピーする既存のCOleSafeArray
オブジェクトまたはSAFEARRAY
。
vtSrc
新しい COleSafeArray
オブジェクトの VARTYPE。
psaSrc
新しいCOleSafeArray
オブジェクトにコピーするSAFEARRAY
へのポインター。
varSrc
新しい COleSafeArray
オブジェクトにコピーする既存の VARIANT
または COleVariant
オブジェクト。
pSrc
新しいCOleSafeArray
オブジェクトにコピーするVARIANT
オブジェクトへのポインター。
解説
これらのコンストラクターはすべて、新しい COleSafeArray
オブジェクトを作成します。 パラメーターがない場合は、空の COleSafeArray
オブジェクトが作成されます (VT_EMPTY)。 VARTYPE が暗黙的に認識されている別の配列 (COleSafeArray
、COleVariant
、またはVARIANT
) からCOleSafeArray
がコピーされる場合、ソース配列の VARTYPE は保持され、指定する必要はありません。 VARTYPE が不明な (SAFEARRAY
) 別の配列からCOleSafeArray
をコピーする場合は、varTYPE を vtSrc パラメーターで指定する必要があります。
エラーが発生すると、関数は CMemoryException または COleException をスローします。
COleSafeArray::Copy
既存のセーフ配列のコピーを作成します。
void Copy(LPSAFEARRAY* ppsa);
パラメーター
ppsa
新しい配列記述子を返す場所へのポインター。
解説
エラーが発生すると、関数は CMemoryException または COleException をスローします。
COleSafeArray::Create
配列のデータを割り当てて初期化します。
void Create(
VARTYPE vtSrc,
DWORD dwDims,
DWORD* rgElements);
void Create(
VARTYPE vtSrc,
DWORD dwDims,
SAFEARRAYBOUND* rgsabounds);
パラメーター
vtSrc
配列の基本型 (つまり、配列の各要素の VARTYPE)。 VARTYPE は、バリアント型のサブセットに制限されます。 VT_ARRAYもVT_BYREFフラグも設定できません。 VT_EMPTYとVT_NULLは、配列の有効な基本型ではありません。 その他の種類はすべて有効です。
dwDims
配列内の次元の数。 これは、配列が Redim で作成された後で変更できます。
rgElements
配列内の各次元の要素数の配列へのポインター。
rgsabounds
配列に割り当てる境界のベクトル (次元ごとに 1 つ) へのポインター。
解説
この関数は、必要に応じて現在の配列データをクリアします。 エラーが発生すると、関数は CMemoryException をスローします。
例
COleSafeArray saMatrix;
DWORD numElements[] = { 10, 5 };
// creates a 2 dimensional safearray of type VT_I2
// with size 10x5 elements, with all indices starting at 0(default)
saMatrix.Create(VT_I2, 2, numElements);
ASSERT(saMatrix.GetDim() == 2);
COleSafeArray saVector;
SAFEARRAYBOUND rgsabounds[] = { {5, 2} };
// creates a 1 dimensional safearray of type VT_I1
// with size 5 elements, with the index starting at 2
saVector.Create(VT_I1, 1, rgsabounds);
ASSERT(saVector.GetDim() == 1);
COleSafeArray::CreateOneDim
新しい 1 次元 COleSafeArray
オブジェクトを作成します。
void CreateOneDim(
VARTYPE vtSrc,
DWORD dwElements,
const void* pvSrcData = NULL,
long nLBound = 0);
パラメーター
vtSrc
配列の基本型 (つまり、配列の各要素の VARTYPE)。
dwElements
配列内の要素の数。 これは、配列が ResizeOneDim で作成された後に変更できます。
pvSrcData
配列にコピーするデータへのポインター。
nLBound
配列の下限。
解説
この関数は配列のデータを割り当てて初期化し、ポインターが null でない場合 pvSrcData 指定したデータをコピーします。
エラーが発生すると、関数は CMemoryException をスローします。
例
VARIANT varColInfo[3];
//initialize VARIANTs
for (int i = 0; i < 3; i++)
VariantInit(&varColInfo[i]);
// Column Name
varColInfo[0].vt = VT_BSTR;
varColInfo[0].bstrVal = ::SysAllocString(L"Name");
// Column Type
varColInfo[1].vt = VT_UI4;
varColInfo[1].lVal = 1;
COleSafeArray sa;
//create a 1 dimensional safearray of VARIANTs
//& initialize it with varColInfo VARIANT array
sa.CreateOneDim(VT_VARIANT, 2, varColInfo);
//check that the dimension is 2
ASSERT(sa.GetOneDimSize() == 2);
//increase safearray size by 1
sa.ResizeOneDim(3);
// populate the last element of the safearray, (Column Size)
varColInfo[2].vt = VT_I4;
varColInfo[2].lVal = 30;
long el = 2;
sa.PutElement(&el, &varColInfo[2]);
COleSafeArray::D estroy
既存の配列記述子と配列内のすべてのデータを破棄します。
void Destroy();
解説
オブジェクトが配列に格納されている場合、各オブジェクトは解放されます。 エラーが発生すると、関数は CMemoryException または COleException をスローします。
COleSafeArray::D estroyData
セーフ配列内のすべてのデータを破棄します。
void DestroyData();
解説
オブジェクトが配列に格納されている場合、各オブジェクトは解放されます。 エラーが発生すると、関数は CMemoryException または COleException をスローします。
COleSafeArray::D estroyDescriptor
セーフ配列の記述子を破棄します。
void DestroyDescriptor();
解説
エラーが発生すると、関数は CMemoryException または COleException をスローします。
COleSafeArray::D etach
COleSafeArray
オブジェクトからVARIANT
データをデタッチします。
VARIANT Detach();
戻り値
COleSafeArray
オブジェクトの基になるVARIANT
値。
解説
この関数は、オブジェクトの VARTYPE を VT_EMPTYに設定することで、セーフ配列内のデータをデタッチします。 Windows 関数 VariantClear を呼び出すことによって、配列を解放するのは呼び出し元の責任です。
エラーが発生すると、関数は COleException をスローします。
例
COleSafeArray::P utElement の例を参照してください。
COleSafeArray::GetByteArray
セーフ配列の内容を CByteArray
にコピーします。
void GetByteArray(CByteArray& bytes);
パラメーター
bytes
CByteArray オブジェクトへの参照。
COleSafeArray::GetDim
COleSafeArray
オブジェクト内のディメンションの数を返します。
DWORD GetDim();
戻り値
セーフ配列内の次元の数。
例
COleSafeArray saMatrix;
DWORD numElements[] = { 10, 5 };
// creates a 2 dimensional safearray of type VT_I2
// with size 10x5 elements, with all indices starting at 0(default)
saMatrix.Create(VT_I2, 2, numElements);
ASSERT(saMatrix.GetDim() == 2);
COleSafeArray saVector;
SAFEARRAYBOUND rgsabounds[] = { {5, 2} };
// creates a 1 dimensional safearray of type VT_I1
// with size 5 elements, with the index starting at 2
saVector.Create(VT_I1, 1, rgsabounds);
ASSERT(saVector.GetDim() == 1);
COleSafeArray::GetElement
セーフ配列の 1 つの要素を取得します。
void GetElement(
long* rgIndices,
void* pvData);
パラメーター
rgIndices
インデックスの配列へのポインター (配列の次元ごと)。
pvData
配列の要素を配置する場所へのポインター。
解説
この関数は、要素を取得する前と後に、 SafeArrayLock
および SafeArrayUnlock
ウィンドウ関数を自動的に呼び出します。 データ要素が文字列、オブジェクト、またはバリアントの場合、関数は正しい方法で要素をコピーします。 パラメーター pvData は、要素を格納するのに十分な大きさのバッファーを指している必要があります。
エラーが発生すると、関数は CMemoryException または COleException をスローします。
例
//sa is of type COleSafeArray with 2 dimensions
//Determine upper bounds for both dimensions
long lNumRows;
long lNumCols;
sa.GetUBound(1, &lNumRows);
sa.GetUBound(2, &lNumCols);
//Display the elements in the SAFEARRAY.
long index[2];
VARIANT val;
//Determine lower bounds for both dimensions
long lowRow, lowCol;
sa.GetLBound(1, &lowRow);
sa.GetLBound(2, &lowCol);
for (long r = lowRow; r <= lNumRows; r++)
{
for (long c = lowCol; c <= lNumCols; c++)
{
index[0] = r;
index[1] = c;
//retrieve each element of the safearray
sa.GetElement(index, &val);
switch (val.vt)
{
case VT_R8:
TRACE(_T("%1.2f\n"), val.dblVal);
break;
case VT_BSTR:
TRACE(_T("%s\n"), (CString)val.bstrVal);
break;
// other cases omitted
case VT_EMPTY:
TRACE(_T("<empty>\n"));
break;
}
}
}
COleSafeArray::GetElemSize
COleSafeArray
オブジェクト内の要素のサイズを取得します。
DWORD GetElemSize();
戻り値
セーフ配列の要素のサイズ (バイト単位)。
COleSafeArray::GetLBound
COleSafeArray
オブジェクトの次元の下限を返します。
void GetLBound(
DWORD dwDim,
long* pLBound);
パラメーター
dwDim
下限を取得する対象の配列の次元。
pLBound
下限を返す場所へのポインター。
解説
エラーが発生すると、関数は COleException をスローします。
例
COleSafeArray saMatrix;
DWORD numElements[] = { 10, 5 };
// creates a 2 dimensional safearray of type VT_I2
// with size 10x5 elements, with all indices starting at 0(default)
saMatrix.Create(VT_I2, 2, numElements);
long lLBound;
//get lower bound for 1st dimension
saMatrix.GetLBound(1, &lLBound);
ASSERT(lLBound == 0);
//get lower for 2nd dimension
saMatrix.GetLBound(2, &lLBound);
ASSERT(lLBound == 0);
COleSafeArray saVector;
SAFEARRAYBOUND rgsabounds[] = { {5, 1} };
// creates a 1 dimensional safearray of type VT_I1
// with size 5 elements, with the index starting at 1
saVector.Create(VT_I1, 1, rgsabounds);
//get lower bound for 1st dimension
saVector.GetLBound(1, &lLBound);
ASSERT(lLBound == 1);
COleSafeArray::GetOneDimSize
1 次元の COleSafeArray
オブジェクト内の要素の数を返します。
DWORD GetOneDimSize();
戻り値
1 次元セーフ配列内の要素の数。
例
COleSafeArray::CreateOneDim の例を参照してください。
COleSafeArray::GetUBound
セーフ配列の次元の上限を返します。
void GetUBound(
DWORD dwDim,
long* pUBound);
パラメーター
dwDim
上限を取得する対象の配列の次元。
pUBound
上限を返す場所へのポインター。
解説
エラーが発生すると、関数は COleException をスローします。
例
COleSafeArray saMatrix;
DWORD numElements[] = { 10, 5 };
// creates a 2 dimensional safearray of type VT_I2
// with size 10x5 elements, with all indices starting at 0(default)
saMatrix.Create(VT_I2, 2, numElements);
long lUBound;
ASSERT(saMatrix.GetDim() == 2);
//get upper bound for 1st dimension
saMatrix.GetUBound(1, &lUBound);
ASSERT(lUBound == 9);
//get upper bound for 2nd dimension
saMatrix.GetUBound(2, &lUBound);
ASSERT(lUBound == 4);
COleSafeArray saVector;
SAFEARRAYBOUND rgsabounds[] = { {5, 1} };
// creates a 1 dimensional safearray of type VT_I1
// with size 5 elements, with the index starting at 1
saVector.Create(VT_I1, 1, rgsabounds);
//get upper bound for 1st dimension
saVector.GetUBound(1, &lUBound);
ASSERT(lUBound == 5);
COleSafeArray::Lock
配列のロックカウントをインクリメントし、配列記述子内の配列データへのポインターを配置します。
void Lock();
解説
エラーが発生すると、 COleException がスローされます。
配列記述子内のポインターは、 Unlock
が呼び出されるまで有効です。 Lock
の呼び出しは入れ子にすることができます。Unlock
の呼び出しの数が同じである必要があります。
ロックされている間は、配列を削除できません。
COleSafeArray::operator LPCVARIANT
この COleSafeArray
オブジェクトの基になる VARIANT
構造体にアクセスするには、このキャスト演算子を呼び出します。
operator LPCVARIANT() const;
COleSafeArray::operator LPVARIANT
この COleSafeArray
オブジェクトの基になる VARIANT
構造体にアクセスするには、このキャスト演算子を呼び出します。
operator LPVARIANT();
解説
この関数によって返されるポインターによってアクセスされる VARIANT
構造体の値を変更すると、この COleSafeArray
オブジェクトの値が変更されることに注意してください。
COleSafeArray::operator =
これらのオーバーロードされた代入演算子を使うと、ソース値をこの COleSafeArray
オブジェクトにコピーすることができます。
COleSafeArray& operator=(const COleSafeArray& saSrc);
COleSafeArray& operator=(const VARIANT& varSrc);
COleSafeArray& operator=(LPCVARIANT pSrc);
COleSafeArray& operator=(const COleVariant& varSrc);
注釈
各演算子の簡単な説明を次に示します。
operator =( saSrc ) 既存の
COleSafeArray
オブジェクトをこのオブジェクトにコピーします。operator =( varSrc ) 既存の
VARIANT
またはCOleVariant
配列をこのオブジェクトにコピーします。operator =( pSrc ) pSrc によってアクセスされた
VARIANT
配列オブジェクトをこのオブジェクトにコピーします。
COleSafeArray::operator ==
この演算子は、2 つの配列 (SAFEARRAY
、 VARIANT
、 COleVariant
、または COleSafeArray
配列) を比較し、等しい場合は 0 以外の値を返します。それ以外の場合は 0 を返します。
BOOL operator==(const SAFEARRAY& saSrc) const; BOOL operator==(LPCSAFEARRAY pSrc) const;
BOOL operator==(const COleSafeArray& saSrc) const; BOOL operator==(const VARIANT& varSrc) const;
BOOL operator==(LPCVARIANT pSrc) const; BOOL operator==(const COleVariant& varSrc) const;
解説
2 つの配列は、等しい次元数、各次元のサイズが等しい場合、および等しい要素値を持つ場合に等しくなります。
COleSafeArray::operator <<
COleSafeArray
挿入 (<<) 演算子は、COleSafeArray
オブジェクトのアーカイブへの診断ダンプと格納をサポートします。
CDumpContext& AFXAPI operator<<(
CDumpContext& dc,
COleSafeArray& saSrc);
COleSafeArray::P trOfIndex
インデックス値で指定された要素へのポインターを返します。
void PtrOfIndex(
long* rgIndices,
void** ppvData);
パラメーター
rgIndices
配列の要素を識別するインデックス値の配列。 要素のすべてのインデックスを指定する必要があります。
ppvData
戻り時に、 rgIndices の値によって識別される要素へのポインター。
COleSafeArray::P utElement
1 つの要素を配列に割り当てます。
void PutElement(
long* rgIndices,
void* pvData);
パラメーター
rgIndices
インデックスの配列へのポインター (配列の次元ごと)。
pvData
配列に割り当てるデータへのポインター。 VT_DISPATCH、VT_UNKNOWN、およびVT_BSTRバリアント型はポインターであり、別のレベルの間接参照は必要ありません。
解説
この関数は、要素を割り当てる前と後 SafeArrayLock と SafeArrayUnlock の Windows 関数を自動的に呼び出します。 データ要素が文字列、オブジェクト、バリアントの場合は、関数によって適切にコピーされ、既存の要素が文字列、オブジェクト、バリアントの場合は、関数によって適切にクリアされます。
配列は多重にロックできるため、配列が別の操作によってロックされている間に要素を配列に配置できることに注意してください。
エラーが発生すると、関数は CMemoryException または COleException をスローします。
例
VARIANT retVariantArray()
{
COleSafeArray saRet;
DWORD numElements[] = { 10, 10 }; // 10x10
// Create the 2 dimensional safe-array of type VT_R8 with size 10x10
saRet.Create(VT_R8, 2, numElements);
// Initialize safearray with values...
long index[2];
for (index[0] = 0; index[0] < 10; index[0]++)
{
for (index[1] = 0; index[1] < 10; index[1]++)
{
double val = index[0] + index[1] * 10;
//populate the safearray elements with double values
saRet.PutElement(index, &val);
}
}
// Return the safe-array encapsulated in a VARIANT...
return saRet.Detach();
}
COleSafeArray::Redim
セーフ配列の最下位 (右端) の境界を変更します。
void Redim(SAFEARRAYBOUND* psaboundNew);
パラメーター
psboundNew
新しい配列バインドを含む、新しい安全な配列バインド構造体へのポインター。 変更できるのは、配列の最下位次元だけです。
解説
エラーが発生すると、関数は COleException をスローします。
COleSafeArray::ResizeOneDim
1 次元の COleSafeArray
オブジェクト内の要素の数を変更します。
void ResizeOneDim(DWORD dwElements);
パラメーター
dwElements
1 次元セーフ配列内の要素の数。
解説
エラーが発生すると、関数は COleException をスローします。
例
COleSafeArray::CreateOneDim の例を参照してください。
COleSafeArray::UnaccessData
配列のロックカウントをデクリメントし、 AccessData
によって取得されたポインターを無効にします。
void UnaccessData();
解説
エラーが発生すると、関数は COleException をスローします。
例
COleSafeArray::AccessData の例を参照してください。
COleSafeArray::Unlock
解放またはサイズ変更できるように、配列のロック数をデクリメントします。
void Unlock();
解説
この関数は、配列内のデータへのアクセスが完了した後に呼び出されます。 エラーが発生すると、 COleException がスローされます。