-
IDispatch
鎖定
IDispatch是由OLE自動化協議暴露出來的接口。
- 中文名
- IDispatch
- 簡 介
- IDispatch是由OLE自動化協
- C語言風格
- typedef struct IDispatchVtbl
- C++語言風格
- IDispatch : public IUnknown
IDispatch簡介
它是COM對象可以暴露出來的標準接口(Interface)之一(IDispatch最前面的“I”代表Interface)。COM可以由三種接口類型予以區分,它們是自定義接口(custom),調度接口(dispatch)和雙重接口(dual interfaces)。
IDispatch可以由IUnknown得到,並且在IUnknown本身所含有三個方法(AddRef,Release和QueryInterface)上增加另外四個方法(GetTypeInfoCount,GetTypeInfo,GetIDsOfNames和Invoke)。
自動化接口IDispatch允許客户端程序探明一個運行中的對象到底支持什麼屬性和方法。
IDispatch結構聲明
C語言風格
typedef struct IDispatchVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IDispatch * This, REFIID riid, void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( IDispatch * This); ULONG ( STDMETHODCALLTYPE *Release )( IDispatch * This); HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( IDispatch * This, UINT *pctinfo); HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( IDispatch * This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( IDispatch * This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT ( STDMETHODCALLTYPE *Invoke )( IDispatch * This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); END_INTERFACE } IDispatchVtbl; interface IDispatch { CONST_VTBL struct IDispatchVtbl *lpVtbl; };
C++語言風格
IDispatch : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount( UINT *pctinfo) = 0; virtual HRESULT STDMETHODCALLTYPE GetTypeInfo( UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) = 0; virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames( REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) = 0; virtual HRESULT STDMETHODCALLTYPE Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) = 0; };
IDispatch方法説明
IDispatch除開由IUnknown繼承來的三個方法以外的餘下四個方法:
方法 | 描述 |
---|---|
GetIDsOfNames | 將單一的數字或一組可選的參數映射到一組對應的整型DISPID上,這些DISPID隨後可以用來調用Invoke。 |
GetTypeInfo | 得到對象的類型信息,從而可以通過它來得到接口的類型信息。 |
得到對象所提供的類型信息接口的數目(0或1)。 | |
Invoke | 提供對對象暴露出來的屬性和方法的訪問。 |
IDispatch所需條件
頭文件 | oaidl.h, oaidl.idl |
庫文件 | oleaut32.lib, uuid.lib |
Windows Embedded CE | Windows CE 2.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |