Share via


SafeArrayAccessData (Compact 2013)

3/26/2014

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

Syntax

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

Parameters

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

Return Value

Returns the HRESULT values shown in the following table.

Value

Description

S_OK

Success.

E_INVALIDARG

The psa parameter was not a valid safearray descriptor.

E_UNEXPECTED

The array could not be locked.

Remarks

Passing invalid (and under some circumstances NULL) pointers to this function causes an unexpected termination of the application.

Example

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

Important

For readability, the following code example does not contain security checking or error handling. Do not use the following code in a production environment.

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

Requirements

Header

oleauto.h

Library

oleaut32.lib

See Also

Reference

Automation Functions
SafeArrayCreate
SafeArrayGetElement
SafeArrayPutElement