次の方法で共有


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

配列の要素。

戻り値

この関数は、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK
正常終了しました。
DISP_E_BADINDEX
指定したインデックスが無効です。
E_INVALIDARG
引数の 1 つが無効です。
E_OUTOFMEMORY
要素にメモリを割り当てませんでした。

注釈

この関数は、要素を取得する前と後に、 SafeArrayLockSafeArrayUnlock を自動的に呼び出します。 呼び出し元は、データを受信するために正しいサイズの記憶域を提供する必要があります。 データ要素が文字列、オブジェクト、またはバリアントの場合、関数は正しい方法で要素をコピーします。

次の例は、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