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]

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

Шаг 52 - CreateStdDispatch

Позволяет создать стандартную реализацию IDispatch одним вызовом функции.

HRESULT CreateStdDispatch
(
	IUnknown FAR* punkOuter,
	void FAR*pvThis,
	ITypelnfo FAR*ptinfo,
	IUnknown FAR* FAR* ppunkStdDisp
);

Параметры:

  • punkOuter - Указатель на реализацию IUnknown для объекта.
  • pvThis - Указатель на предоставляемый объект.
  • ptinfo - Указатель на информацию о типе, описывающую предоставляемый объект.
  • ppunkStdDisp - Возвращаемый интерфейс IUnknown объекта, который реализует IDispatch. В случае ошибки указатель равен NULL.

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

Код возвратаЗначение
S_OKУспех.
E_INVALIDARGОдин из первых трех параметров неверен.
E_OUTOFMEMORYHe хватает памяти для выполнения операции.

Комментарии:
При создании объекта вместо того, чтобы реализовывать для него функции-члены IDispatch, Вы можете прибегнуть к CreateStdDispatch. Однако создаваемая этой функцией реализация имеет следующие ограничения:

  • Поддерживает только один национальный язык.
  • Поддерживает возврат из Invoke только стандартных кодов исключений.
  • LoadTypeLib, GetTypelnfoOfGuid и CreateStdDispatch составляют минимальный набор функций, которые Вам необходимо вызывать для предоставления объекта с использованием библиотеки типа. Подробнее о LoadTypeLib и GetTypelnfoOfGuid.
  • CreateDispTypelnfo и CreateStdDispatch составляют минимальный набор диспетчерских компонентов, которые необходимо вызывать для предоставления объекта с использованием информации о типе, заданной в структуре INTERFACEDATA.

Пример:
Следующий фрагмент кода реализует интерфейс IDispatch для класса CCalc с помощью CreateStdDispatch.

CCalc FAR* CCalc::Create() 
{
	HRESULT hresult;
	CCalc FAR* pcalc;
	CArith FAR* parith;
	ITypelnfo FAR* ptinfo;
	IUnknown FAR* punkStdDisp; 
	extern INTERFACEDATA NEARDATA g_idataCCalc;

	if ((pcalc = new FAR CCalc()) == NULL) return NULL; 
	pcalc->AddRef();
	parith = &(pcalc->m_arith);

	// Построить информацию о типе для функциональности объекта, к которой 
	// предоставляется программный доступ извне.

	hresult = CreateDispTypeInfo(&g_idataCCalc, LOCALE_SYSTEM_DEFAULT, &ptinfo); 
	if(hresult != NOERROR) goto LErrorO;

	// Создать агрегат с экземпляром стандартной реализации 
	// IDispatch, инициализированной нашей информацией о типе.

	hresult = CreateStdDispatch(pcalc,	// Управляющий IUnknown.
		parith,	// Экземпляр для распределения вызовов.
		ptinfo,	// Информация о типе, описывающая экземпляр.
		&punkStdDisp);

	ptinfo->Release();
	if(hresult != NOERROR) goto LErrorO;
	pcalc->m_punkStdDisp = punkStdDisp; 
	return pcalc;
LErrorO:;
	pcalc->Release(); 
	return NULL;
};

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





Letyshops [lifetime]