Увеличивает счетчик блокировок массива и возвращает указатель на данные массива.
HRESULT SafeArrayAccessData ( SAFEARRAY FAR*psa, void HUGEP* FAR*ppvData );
Параметры:
psa
Указатель на дескриптор массива, созданный с помощью SafeArrayCreate.
ppvData
По возвращении указывает на указатель на данные массива. Размер массива может превышать 64К, так что в 16-разрядных Windows 3.1 и старше следует использовать указатели типа huge.
Коды возврата:
Из возвращенного HRESULT получают один из следующих кодов возврата:
Код возврата | Значение |
---|---|
S_OK | Успех. |
E_INVALIDARG | Параметр psa не является правильным дескриптором безопасного массива. |
E_UNEXPECTED | Массив нельзя заблокировать. |
Пример:
В приведенном ниже примере выполняется сортировка одномерного безопасного массива BSTR с обращением к его элементам напрямую. Этот способ работает быстрее, чем если прибегнуть к SafeArrayGetElement и SafeArrayPutElement.
long i, j, min; BSTR bstrTemp; BSTR HUGEP *pbstr; HRESULT hr; // Получить указатель на элементы массива. hr = SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; // "Пузырьковая" сортировка. cEleisents = lUBound-1l_Bound+1; for (i = 0; i < cElements-1) { min = i; for (j = i+1; j < cElements; j++) { if (wcscmp(pbstr[j], pbstr[min]) < 0) min = j; } // Поменять Maccив[min] и массив[1] bstrTemp = pbstr[min]; pbstr[min] = pbstr[i]; pbstr[i] = bstrTemp; } SafeArrayUnaccessData(psa);