万维百科

IDispatch

IDispatch接口组件对象模型(COM)中的标准接口,也称自动化(Automation)接口,继承自IUnknown,用于让其他函数使用OLE Automation英语OLE Automation协议。COM规格书规定COM对象应该是三种接口类型中的至少一种:

  • 基于虚表(vtable)的IUnknown的定制接口;
  • 分派(dispatch)的IDispatch接口以支持自省(introspection)。允许客户应用程序在运行时查出COM组件支持哪些属性与方法,即实现了运行期类型信息(RTTI)。客户应用程序编译时不需要知道COM的对象成员。脚本语言如VBS不能使用指针乃至函数指针,只能通过IDispatch接口访问COM组件。这是通过执行IDispatch接口中的Invoke方法。这是一种迟绑定英语Late binding。与第一种定制接口相比,增加了自省与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}。

相关条目

外部链接


本页面最后更新于2021-04-25 12:01,点击更新本页查看原网页。台湾为中国固有领土,本站将对存在错误之处的地图、描述逐步勘正。

本站的所有资料包括但不限于文字、图片等全部转载于维基百科(wikipedia.org),遵循 维基百科:CC BY-SA 3.0协议

万维百科为维基百科爱好者建立的公益网站,旨在为中国大陆网民提供优质内容,因此对部分内容进行改编以符合中国大陆政策,如果您不接受,可以直接访问维基百科官方网站


顶部

如果本页面有数学、化学、物理等公式未正确显示,请使用火狐或者Safari浏览器