IDispatch

IDispatch介面是组件对象模型（COM）中的标准介面，也称自动化（Automation）接口，继承自IUnknown，用于讓其他函式使用协议。COM規格書規定COM物件应该是三种接口类型中的至少一种：
基于虚表（vtable）的IUnknown的定制接口；
分派（dispatch）的IDispatch接口以支持內觀資訊（introspection）。允许客户应用程序在运行时查出COM组件支持哪些属性与方法，即实现了运行期类型信息（RTTI）。客户应用程序编译时不需要知道COM的对象成员。脚本语言如VBS不能使用指针乃至函数指针，只能通过IDispatch接口访问COM组件。这是通过执行IDispatch接口中的Invoke方法。这是一种。与第一种定制接口相比，增加了內觀資訊与invoke的开销。
dual接口，同时支持上述两种类型的接口

方法
支持IDispatch的COM对象实现的每个属性与方法都有自己的Dispatch ID，常缩写为DISPID。用于在Invoke方法中辨识哪个属性或方法将被调用。 

IDispatch派生自IUnknown，并且扩展了4个额外的方法：
interface IDispatch : public IUnknown {
  virtual HRESULT GetTypeInfoCount(unsigned int * pctinfo) = 0;
  virtual HRESULT GetTypeInfo(unsigned int iTInfo,
                              LCID lcid,
                              ITypeInfo ** ppTInfo
                             ) = 0;
  virtual HRESULT GetIDsOfNames(REFIID riid,
                                OLECHAR ** rgszNames,
                                unsigned int cNames,
                                LCID lcid,
                                DISPID * rgDispId
                               ) = 0;
  virtual HRESULT Invoke(DISPID dispIdMember,
                         REFIID riid,
                         LCID lcid,
                         WORD wFlags,
                         DISPPARAMS * pDispParams,
                         VARIANT * pVarResult,
                         EXCEPINFO * pExcepInfo,
                         unsigned int * puArgErr
                        ) = 0;
};
IDispatch的接口标识符被定义为GUID值{00020400-0000-0000-C000-000000000046}。

參考資料

相關條目
IFilter
IInspectable
IObjectWithSite
IOleObject

外部連結
 COM in plain C

面向对象的程序设计
微軟API