Поделиться через


Класс IDispEventImpl

Этот класс предоставляет реализации IDispatch методов.

Важно!

Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.

Синтаксис

template <UINT nID, class T,
    const IID* pdiid = &IID_NULL,
    const GUID* plibid = &GUID_NULL,
    WORD wMajor = 0,
    WORD wMinor = 0,
    class tihclass = CcomTypeInfoHolder>
class ATL_NO_VTABLE IDispEventImpl : public IDispEventSimpleImpl<nID, T, pdiid>

Параметры

Nid
Уникальный идентификатор исходного объекта. Если IDispEventImpl используется базовый класс для составного элемента управления, используйте идентификатор ресурса требуемого содержащегося элемента управления для этого параметра. В других случаях используйте произвольное положительное целое число.

T
Класс пользователя, производный от IDispEventImpl.

pdiid
Указатель на iiD события dispinterface, реализованный этим классом. Этот интерфейс должен быть определен в библиотеке типов, обозначаемой plibid, wMajor и wMinor.

plibid
Указатель на библиотеку типов, определяющую интерфейс диспетчера, на который указывает pdiid. Если &GUID_NULL, библиотека типов будет загружена из объекта, исходя из событий.

wMajor
Основной номер версии для библиотеки типов. Значение по умолчанию равно 0.

wMinor
Дополнительный номер версии для библиотеки типов. Значение по умолчанию равно 0.

tihclass
Класс, используемый для управления сведениями о типах для T. Значение по умолчанию — это класс типа CComTypeInfoHolder. Однако этот параметр шаблона можно переопределить, предоставив класс типа, отличного от CComTypeInfoHolderтипа.

Участники

Общедоступные определения типов

Имя Описание
IDispEventImpl::_tihclass Класс, используемый для управления сведениями о типе. По умолчанию CComTypeInfoHolder.

Открытые конструкторы

Имя Описание
IDispEventImpl::IDispEventImpl Конструктор.

Открытые методы

Имя Описание
IDispEventImpl::GetFuncInfoFromId Находит индекс функции для указанного идентификатора диспетчера.
IDispEventImpl::GetIDsOfNames Карты один элемент и необязательный набор имен аргументов в соответствующий набор целых чисел DISPID.
IDispEventImpl::GetTypeInfo Извлекает сведения о типе для объекта.
IDispEventImpl::GetTypeInfoCount Извлекает количество интерфейсов сведений о типе.
IDispEventImpl::GetUserDefinedType Извлекает базовый тип определяемого пользователем типа.

Замечания

IDispEventImpl предоставляет способ реализации события dispinterface, не требуя предоставления кода реализации для каждого метода или события в этом интерфейсе. IDispEventImpl предоставляет реализации IDispatch методов. Необходимо предоставить реализации только для интересующих вас событий.

IDispEventImpl работает вместе с картой приемника событий в классе для маршрутизации событий в соответствующую функцию обработчика. Чтобы использовать этот класс, выполните указанные ниже действия.

Добавьте макрос SINK_ENTRY или SINK_ENTRY_EX в карту приемника событий для каждого события в каждом объекте, который требуется обрабатывать. При использовании IDispEventImpl в качестве базового класса составного элемента управления можно вызвать AtlAdviseSinkMap для установления и разрыва соединения с источниками событий для всех записей на карте приемника событий. В других случаях или для более широкого управления вызовите DispEventAdvise , чтобы установить соединение между исходным объектом и базовым классом. Вызов DispEventUnadvise для разрыва подключения.

Для каждого объекта, для которого необходимо обрабатывать события, необходимо наследовать ( IDispEventImpl используя уникальное значение для nID). Вы можете повторно использовать базовый класс, не указав один исходный объект, а затем советуя другому исходному объекту, но максимальное количество исходных объектов, которые могут обрабатываться одним объектом в один раз, ограничивается числом базовых IDispEventImpl классов.

IDispEventImpl предоставляет те же функции, что и IDispEventSimpleImpl, за исключением того, что он получает сведения о типе интерфейса из библиотеки типов, а не предоставляя его в качестве указателя на структуру _ATL_FUNC_INFO . Используйте IDispEventSimpleImpl , если у вас нет библиотеки типов, описывающей интерфейс событий, или вы хотите избежать накладных расходов, связанных с использованием библиотеки типов.

Примечание.

IDispEventImpl и IDispEventSimpleImpl предоставьте собственную реализацию IUnknown::QueryInterface , чтобы каждый IDispEventImpl и IDispEventSimpleImpl базовый класс действовали в качестве отдельного com-удостоверения, сохраняя прямой доступ к членам класса в основном com-объекте.

Реализация CE ATL приемников событий ActiveX поддерживает только возвращаемые значения типа HRESULT или void из методов обработчика событий; любое другое возвращаемое значение не поддерживается, и его поведение не определено.

Дополнительные сведения см. в разделе "Поддержка IDispEventImpl".

Иерархия наследования

_IDispEvent

_IDispEventLocator

IDispEventSimpleImpl

IDispEventImpl

Requirements

Заголовок: atlcom.h

IDispEventImpl::GetFuncInfoFromId

Находит индекс функции для указанного идентификатора диспетчера.

HRESULT GetFuncInfoFromId(
    const IID& iid,
    DISPID dispidMember,
    LCID lcid,
    _ATL_FUNC_INFO& info);

Параметры

Iid
[in] Ссылка на идентификатор функции.

dispidMember
[in] Идентификатор диспетчера функции.

lcid
[in] Контекст языкового стандарта идентификатора функции.

info
[in] Структура, указывающая, как вызывается функция.

Возвращаемое значение

Стандартное значение HRESULT.

IDispEventImpl::GetIDsOfNames

Карты один член и необязательный набор имен аргументов в соответствующий набор целых чисел DISPID, который можно использовать при последующих вызовах IDispatch::Invoke.

STDMETHOD(GetIDsOfNames)(
    REFIID riid,
    LPOLESTR* rgszNames,
    UINT cNames,
    LCID lcid,
    DISPID* rgdispid);

Замечания

См . раздел IDispatch::GetIDsOfNames в пакете SDK для Windows.

IDispEventImpl::GetTypeInfo

Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса.

STDMETHOD(GetTypeInfo)(
    UINT itinfo,
    LCID lcid,
    ITypeInfo** pptinfo);

Замечания

IDispEventImpl::GetTypeInfoCount

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

STDMETHOD(GetTypeInfoCount)(UINT* pctinfo);

Замечания

См. раздел IDispatch::GetTypeInfoCount в пакете SDK для Windows.

IDispEventImpl::GetUserDefinedType

Извлекает базовый тип определяемого пользователем типа.

VARTYPE GetUserDefinedType(
    ITypeInfo* pTI,
    HREFTYPE hrt);

Параметры

Pti
[in] Указатель на интерфейс ITypeInfo , содержащий определяемый пользователем тип.

Згт
[in] Дескриптор описания типа, который необходимо извлечь.

Возвращаемое значение

Тип варианта.

Замечания

См. раздел ITypeInfo::GetRefTypeInfo.

IDispEventImpl::IDispEventImpl

Конструктор. Сохраняет значения параметров шаблона класса plibid, pdiid, wMajor и wMinor.

IDispEventImpl();

IDispEventImpl::tihclass

Этот типдифицируется как экземпляр параметра шаблона класса tihclass.

typedef tihclass _tihclass;

Замечания

По умолчанию класс имеет значение CComTypeInfoHolder. CComTypeInfoHolder управляет сведениями о типе для класса.

См. также

Структура _ATL_FUNC_INFO
Класс IDispatchImpl
Класс IDispEventSimpleImpl
SINK_ENTRY
SINK_ENTRY_EX
SINK_ENTRY_INFO
Общие сведения о классе