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);