SafeArrayGetElement 関数 (oleauto.h)
配列の 1 つの要素を取得します。
構文
HRESULT SafeArrayGetElement(
[in] SAFEARRAY *psa,
[in] LONG *rgIndices,
[out] void *pv
);
パラメーター
[in] psa
SafeArrayCreate によって作成された配列記述子。
[in] rgIndices
配列の各次元のインデックスのベクトル。 右端 (最下位) ディメンションは rgIndices[0] です。 左端のディメンションは に rgIndices[psa->cDims – 1]
格納されます。
[out] pv
配列の要素。
戻り値
この関数は、これらの値のいずれかを返すことができます。
リターン コード | 説明 |
---|---|
|
正常終了しました。 |
|
指定したインデックスが無効です。 |
|
引数の 1 つが無効です。 |
|
要素にメモリを割り当てませんでした。 |
注釈
この関数は、要素を取得する前と後に、 SafeArrayLock と SafeArrayUnlock を自動的に呼び出します。 呼び出し元は、データを受信するために正しいサイズの記憶域を提供する必要があります。 データ要素が文字列、オブジェクト、またはバリアントの場合、関数は正しい方法で要素をコピーします。
例
次の例は、COM Fundamentals SPoly サンプル (Cenumpt.cpp) から取得したものです。
STDMETHODIMP CEnumPoint::Next(
ULONG celt,
VARIANT rgvar[],
ULONG * pceltFetched)
{
unsigned int i;
long ix;
HRESULT hresult;
for(i = 0; i < celt; ++i)
VariantInit(&rgvar[i]);
for(i = 0; i < celt; ++i){
// Are we at the last element?
if(m_iCurrent == m_celts){
hresult = S_FALSE;
goto LDone;
}
ix = m_iCurrent++;
// m_psa is a global variable that holds the safe array.
hresult = SafeArrayGetElement(m_psa, &ix, &rgvar[i]);
if(FAILED(hresult))
goto LError0;
}
hresult = NOERROR;
LDone:;
if (pceltFetched != NULL)
*pceltFetched = i;
return hresult;
LError0:;
for(i = 0; i < celt; ++i)
VariantClear(&rgvar[i]);
return hresult;
}
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | oleauto.h |
Library | OleAut32.lib |
[DLL] | OleAut32.dll |