다음을 통해 공유


SafeArrayGetElement 함수(oleauto.h)

배열의 단일 요소를 검색합니다.

구문

HRESULT SafeArrayGetElement(
  [in]  SAFEARRAY *psa,
  [in]  LONG      *rgIndices,
  [out] void      *pv
);

매개 변수

[in] psa

SafeArrayCreate에서 만든 배열 설명자입니다.

[in] rgIndices

배열의 각 차원에 대한 인덱스의 벡터입니다. 가장 오른쪽(가장 중요하지 않은) 차원은 rgIndices[0]입니다. 가장 왼쪽 차원은 에 rgIndices[psa->cDims – 1]저장됩니다.

[out] pv

배열의 요소입니다.

반환 값

이 함수는 이러한 값 중 하나를 반환할 수 있습니다.

반환 코드 Description
S_OK
성공.
DISP_E_BADINDEX
지정한 인덱스가 잘못되었습니다.
E_INVALIDARG
인수 중 하나가 잘못되었습니다.
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
라이브러리 OleAut32.lib
DLL OleAut32.dll