C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Letyshops [lifetime]

 110 - SafeArrayPutElement / COM-справка / Приложение

Шаг 110 - SafeArrayPutElement

Устанавливает значение элемента массива.

HRESULT SafeArrayPutElement
( 
	SAFEARRAY FAR* psa, 
	long FAR* rglndices, 
	void FAR*pv
);

Параметры:
psa
Указатель на дескриптор массива, созданный с помощью SafeArrayCreate.
rglndices
Массив индексов, по одному для каждого измерения массива. Самый правый (наименее значащий) индекс находится в rgIndices[0]. Самый левый индекс хранится в rgIndices[psa -< cDims-1 ].
pv
Указатель на данные, помещаемые в массив. Вариантные типы VT_DISPATCH, VT_UNKNOWN и VT_BSTR представляют собой указатели и не требуют дополнительного уровня косвенности.

Коды возврата:
Из возвращенного HRESULT получают один из следующих кодов возврата:

Код возвратаЗначение
S_OKУспех.
DISP_E_BADINDEXЗадан неверный индекс.
E_INVALIDARGОдин из аргументов неверен.
E_OUTOFMEMORYНевозможно выделить память для элемента.

Комментарии:
Перед присваиванием значения элементу и после этого функция автоматически вызывает SafeArrayLock и SafeArrayUnlock. Функция обеспечивает корректное присваивание данных, представляющих собой строку, объект или вариант. Если до присваивания элемент массива содержал строку, объект или вариант, то функция выполняет корректную очистку.
Примечание. Массив можно блокировать многократно. Можно помещать элементы в массив, заблокированный другими операциями.

Пример:

HRESULT PASCAL _export CPoly::EnumPoints(IEnumVARIANT FAR* FAR* ppenum)
{
	unsigned int i; 
	HRESULT hresult; 
	VARIANT var; 
	SAFEARRAY FAR* psa; 
	CEnumPoint FAR* penum; 
	POINTLINK FAR* ppointlink; 
	SAFEARRAYBOUND rgsabound[1]; 
	rgsabound[0].lLbound = 0; 
	rgsabound[0].cElements = m_cPoints;

	psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound); i
	f(psa == NULL)
	{
		hresult = ResultFromScode(E_OUTOFMEMORY); 
		goto LError0;
	}

	// Код для краткости опущен.

		V_VT(&var) = VT_DISPATCH; 
		hresult = ppointlink->ppoint->QueryInterface( IID_IDispatch,   (void FAR* FAR*)&V_DISPATCH(&var)); 
		if(hresult != NOERROR) goto LError1;

		ix[0] = i; 
	
		SafeArrayPutElement(psa, ix, &var);
		ppointlink = ppointlink->next;
	};

	hresult = CEnumPoint::Create(psa,  &penum); 
	if(hresult != NOERROR) goto LError1; 
	*ppenum = penum; 
	return NOERROR;
LError1:
	SafeArrayDestroy(psa);
LError0:
	return hresult;
}

| |
Автор Каев Артем.
[AD]





Letyshops [lifetime]