fbpx
维基百科

IDispatch

IDispatch介面组件对象模型(COM)中的标准介面,也称自动化(Automation)接口,继承自IUnknown,用于讓其他函式使用OLE Automation英语OLE Automation协议[1]。COM規格書[2]規定COM物件应该是三种接口类型中的至少一种:

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

參考資料

  1. ^ Microsoft MSDN: IDispatch interface (页面存档备份,存于互联网档案馆
  2. ^ . [2016-12-26]. (原始内容存档于2016-12-21). 
  3. ^ Microsoft MSDN: ActiveX/COM Q&A December 1995 (页面存档备份,存于互联网档案馆

相關條目

外部連結

idispatch, 介面是组件对象模型, 中的标准介面, 也称自动化, automation, 接口, 继承自iunknown, 用于讓其他函式使用ole, automation, 英语, automation, 协议, com規格書, 規定com物件应该是三种接口类型中的至少一种, 基于虚表, vtable, 的iunknown的定制接口, 分派, dispatch, 的接口以支持內觀資訊, introspection, 允许客户应用程序在运行时查出com组件支持哪些属性与方法, 即实现了运行期类型信息, rt. IDispatch介面是组件对象模型 COM 中的标准介面 也称自动化 Automation 接口 继承自IUnknown 用于讓其他函式使用OLE Automation 英语 OLE Automation 协议 1 COM規格書 2 規定COM物件应该是三种接口类型中的至少一种 基于虚表 vtable 的IUnknown的定制接口 分派 dispatch 的IDispatch接口以支持內觀資訊 introspection 允许客户应用程序在运行时查出COM组件支持哪些属性与方法 即实现了运行期类型信息 RTTI 客户应用程序编译时不需要知道COM的对象成员 脚本语言如VBS不能使用指针乃至函数指针 只能通过IDispatch接口访问COM组件 这是通过执行IDispatch接口中的Invoke方法 这是一种迟绑定 英语 Late binding 与第一种定制接口相比 增加了內觀資訊与invoke的开销 3 dual接口 同时支持上述两种类型的接口目录 1 方法 2 參考資料 3 相關條目 4 外部連結方法 编辑支持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 參考資料 编辑 Microsoft MSDN IDispatch interface 页面存档备份 存于互联网档案馆 COM specification 2016 12 26 原始内容存档于2016 12 21 Microsoft MSDN ActiveX COM Q amp A December 1995 页面存档备份 存于互联网档案馆 相關條目 编辑IFilter IInspectable IObjectWithSite IOleObject外部連結 编辑COM in plain C 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title IDispatch amp oldid 63129602, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。