SafeArrayGetElement Function
Retrieves a single element of the array.
HRESULT SafeArrayGetElement( SAFEARRAY * psa, long * rgIndices, void * pv );
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.
The following example is taken from the COM Fundamentals SPoly sample (Cenumpt.cpp) shipped with the Platform SDK.
STDMETHODIMP CEnumPoint::Next(
ULONG celt,
VARIANT FAR 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;
}
Show: