複製鏈接
請複製以下鏈接發送給好友

IDispatch

鎖定
IDispatch是由OLE自動化協議暴露出來的接口。
中文名
IDispatch
簡    介
IDispatch是由OLE自動化協
C語言風格
typedef struct IDispatchVtbl
C++語言風格
IDispatch : public IUnknown

IDispatch簡介

自動化接口IDispatch 自動化接口IDispatch
它是COM對象可以暴露出來的標準接口(Interface)之一(IDispatch最前面的“I”代表Interface)。COM可以由三種接口類型予以區分,它們是自定義接口(custom),調度接口(dispatch)和雙重接口(dual interfaces)。
IDispatch可以由IUnknown得到,並且在IUnknown本身所含有三個方法(AddRef,ReleaseQueryInterface)上增加另外四個方法(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