SafeArrayGetElement

HRESULT SafeArrayGetElement( 
  SAFEARRAY FAR*  psa,  
  long FAR*  rgIndices, 
  void FAR*  pv         
);
 

Retrieves a single element of the array.

Parameters

psa
Pointer to an array descriptor created by SafeArrayCreate.
rgIndices
Pointer to a vector of indexes for each dimension of the array. The right-most (least significant) dimension is rgIndices[0]. The left-most dimension is stored at rgIndices[psa->cDims – 1].
pv
Pointer to the location to place the element of the array.

Comments

This function calls SafeArrayLock and SafeArrayUnlock automatically, before and after retrieving the element. The caller must provide a storage area of the correct size to receive the data. If the data element is a string, object, or variant, the function copies the element in the correct way.

Return Value

The return value obtained from the returned HRESULT is one of the following.

Return value Meaning
S_OK Success.
DISP_E_BADINDEX The specified index is invalid.
E_INVALIDARG One of the arguments is invalid.
E_OUTOFMEMORY Memory could not be allocated for the element.

Example

STDMETHODIMP CEnumPoint::Next(
    ULONG celt,
    VARIANT FAR rgvar[],
    ULONG FAR* pceltFetched)
{
    unsigned int i;
    long ix;
    HRESULT hresult;

    for(i = 0; i < celt; ++i)
        VariantInit(&rgvar[i]);

    for(i = 0; i < celt; ++i){
        if(m_iCurrent == m_celts){
        hresult = ReportResult(0, S_FALSE, 0, 0);
            goto LDone;
    }

        ix = m_iCurrent++;
        hresult = SafeArrayGetElement(m_psa, &ix, &rgvar[i]);
        if(FAILED(hresult))
            goto LError0;
    }
    hresult = NOERROR;

LDone:;
    *pceltFetched = i;
    return hresult;

LError0:;
    for(i = 0; i < celt; ++i)
        VariantClear(&rgvar[i]);
    return hresult;
}

QuickInfo

  Windows NT: Use version 3.1 and later.
  Windows: Use Windows 95 and later.
  Header: Declared in oleauto.h.
  Import Library: Link with oleaut32.lib.