IDispatch

IDispatch是由OLE自動化協定暴露出來的接口。

基本介紹

  • 中文名:IDispatch
  • 簡介:IDispatch是由OLE自動化協
  • C語言風格:typedef struct IDispatchVtbl
  • C++語言風格:IDispatch : public IUnknown
簡介,結構聲明,C語言風格,C++語言風格,方法說明,所需條件,

簡介

它是COM對象可以暴露出來的標準接口(Interface)之一(IDispatch最前面的“I”代表Interface)。COM可以由三種接口類型予以區分,它們是自定義接口(custom),調度接口(dispatch)和雙重接口(dual interfaces)。
自動化接口IDispatch自動化接口IDispatch
IDispatch可以由IUnknown得到,並且在IUnknown本身所含有三個方法(AddRef,ReleaseQueryInterface)上增加另外四個方法(GetTypeInfoCount,GetTypeInfo,GetIDsOfNames和Invoke)。
自動化接口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除開由IUnknown繼承來的三個方法以外的餘下四個方法:
方法描述
GetIDsOfNames
將單一的數字或一組可選的參數映射到一組對應的整型DISPID上,這些DISPID隨後可以用來調用Invoke。
GetTypeInfo
得到對象的類型信息,從而可以通過它來得到接口的類型信息。
得到對象所提供的類型信息接口的數目(0或1)。
Invoke
提供對對象暴露出來的屬性和方法的訪問。

所需條件

頭檔案
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

相關詞條

熱門詞條

聯絡我們