Шаг 94 - 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);

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 16.03.2003