Справочник по технологии COM
Страница 92. Структура SAFEARRAYBOUND


 

Структура SAFEARRAYBOUND

Содержит информацию о границах одного измерения массива. Нижнюю границу задает ILbound, a cElements

 typedef struct 
tagSAFEARRAYBOUND { unsigned long cElements; long ILbound; } SAFEARRAYBOUND;
.

SafeArrayAccessData

Увеличивает счетчик блокировок массива и возвращает указатель на данные массива.

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

 
Следующая статья »