SafeArrayAccessData

This function increments the lock count of an array, and retrieves a pointer to the array data.

At a Glance

Header file: Oleauto.h
Windows CE versions: 2.0 and later

Syntax

SeeHRESULT SafeArrayAccessData( SAFEARRAY FAR * psa,
void HUGEP * FAR * ppvData);

Parameters

psa

[in] Pointer to an array descriptor created by SafeArrayCreate.

ppvData

[in] On exit, pointer to a pointer to the array data.

Return Values

One of the values obtained from the returned HRESULT and described in the following table is returned.

Value Description
S_OK Success.
E_INVALIDARG The psa parameter was not a valid safe array descriptor.
E_UNEXPECTED The array could not be locked.

Remarks

Passing into this function any invalid and, under some circumstances, NULL pointers will result in unexpected termination of the application.

Example

The following code example sorts a safe array of one dimension that contains BSTRs by accessing the array elements directly. This approach is faster than using SafeArrayGetElement and SafeArrayPutElement.

long i, j, min; 
BSTR BSTRTemp;
BSTR HUGEP *pBSTR;
HRESULT hr;

// Get a pointer to the elements of the array.
hr = SafeArrayAccessData(psa, (void HUGEP* FAR*)&pBSTR);
if (FAILED(hr))
goto error;

// Bubble sort.
cElements = lUBound–lLBound+1; 
for (i = 0; i < cElements–1; i++)
{
   min = i;
   for (j = i+1; j < cElements; j++)
   {
      if (wcscmp(pBSTR[j], pBSTR[min]) < 0)
         min = j; 
   }

   // Swap array[min] and array[i].
   BSTRTemp = pBSTR[min];
   pBSTR[min] = pBSTR[i];
   pBSTR[i] = BSTRTemp;

}

SafeArrayUnaccessData(psa);