Класс IDispatchImpl
Предоставляет реализацию по умолчанию для IDispatch
части двойного интерфейса.
Внимание
Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.
Синтаксис
template<class T,
const IID* piid= &__uuidof(T),
const GUID* plibid = &CAtlModule::m_libid,
WORD wMajor = 1,
WORD wMinor = 0,
class tihclass = CComTypeInfoHolder>
class ATL_NO_VTABLE IDispatchImpl : public T
Параметры
T
[in] Двойной интерфейс.
piid
[in] Указатель на IID T.
plibid
[in] Указатель на LIBID библиотеки типов, содержащей сведения об интерфейсе. По умолчанию передается библиотека типов уровня сервера.
wMajor
[in] Основная версия библиотеки типов. По умолчанию значение равно 1.
wMinor
[in] Дополнительная версия библиотеки типов. По умолчанию значение равно 0.
tihclass
[in] Класс, используемый для управления сведениями о типах для T. По умолчанию значение равно CComTypeInfoHolder
.
Участники
Открытые конструкторы
Имя | Описание |
---|---|
IDispatchImpl::IDispatchImpl | Конструктор. Вызывает AddRef защищенную переменную-член, которая управляет сведениями о типе для двойного интерфейса. Деструктор вызывает Release . |
Открытые методы
Имя | Описание |
---|---|
IDispatchImpl::GetIDsOfNames | Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. |
IDispatchImpl::GetTypeInfo | Извлекает сведения о типе для двойного интерфейса. |
IDispatchImpl::GetTypeInfoCount | Определяет, доступны ли сведения о типе для двойного интерфейса. |
IDispatchImpl::Invoke | Предоставляет доступ к методам и свойствам, предоставляемым двойным интерфейсом. |
Замечания
IDispatchImpl
предоставляет реализацию по умолчанию для IDispatch
части любого двойного интерфейса объекта. Двойной интерфейс является производным от и использует только типы, совместимые с IDispatch
автоматизацией. Как и dispinterface, двойной интерфейс поддерживает раннюю привязку и позднюю привязку; однако двойной интерфейс также поддерживает привязку vtable.
В следующем примере показана типичная реализация IDispatchImpl
.
class ATL_NO_VTABLE CBeeper :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBeeper, &CLSID_Beeper>,
public IDispatchImpl<IBeeper, &IID_IBeeper, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
По умолчанию IDispatchImpl
класс ищет сведения о типе для T в реестре. Для реализации незарегистрированного интерфейса можно использовать IDispatchImpl
класс без доступа к реестру с помощью предопределенного номера версии. Если вы создаете IDispatchImpl
объект, имеющий 0xFFFF в качестве значения для wMajor и 0xFFFF в качестве значения wMinor, IDispatchImpl
класс извлекает библиотеку типов из файла .dll вместо реестра.
IDispatchImpl
содержит статический элемент типа, который управляет сведениями о типе CComTypeInfoHolder
для двойного интерфейса. Если у вас несколько объектов, реализующих один и тот же двойной интерфейс, используется только один экземпляр CComTypeInfoHolder
.
Иерархия наследования
T
IDispatchImpl
Требования
Заголовок: atlcom.h
IDispatchImpl::GetIDsOfNames
Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.
STDMETHOD(GetIDsOfNames)(
REFIID riid,
LPOLESTR* rgszNames,
UINT cNames,
LCID lcid,
DISPID* rgdispid);
Замечания
См . раздел IDispatch::GetIDsOfNames в пакете SDK для Windows.
IDispatchImpl::GetTypeInfo
Извлекает сведения о типе для двойного интерфейса.
STDMETHOD(GetTypeInfo)(
UINT itinfo,
LCID lcid,
ITypeInfo** pptinfo);
Замечания
См. раздел IDispatch::GetTypeInfo в пакете SDK для Windows.
IDispatchImpl::GetTypeInfoCount
Определяет, доступны ли сведения о типе для двойного интерфейса.
STDMETHOD(GetTypeInfoCount)(UINT* pctinfo);
Замечания
См IDispatch::GetTypeInfoCount
. в пакете SDK для Windows.
IDispatchImpl::IDispatchImpl
Конструктор. Вызывает AddRef
защищенную переменную-член, которая управляет сведениями о типе для двойного интерфейса. Деструктор вызывает Release
.
IDispatchImpl();
IDispatchImpl::Invoke
Предоставляет доступ к методам и свойствам, предоставляемым двойным интерфейсом.
STDMETHOD(Invoke)(
DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS* pdispparams,
VARIANT* pvarResult,
EXCEPINFO* pexcepinfo,
UINT* puArgErr);
Замечания
См . раздел IDispatch::Invoke в пакете SDK для Windows.