尽管com接口是跨语言的,但是很多语言在使用com时更多.PDFVIP

  • 21
  • 0
  • 约2.33万字
  • 约 13页
  • 2018-12-03 发布于天津
  • 举报

尽管com接口是跨语言的,但是很多语言在使用com时更多.PDF

尽管com接口是跨语言的,但是很多语言在使用com时更多

IDispatch IIDDiissppaattcchh接口原理与应用 目录: 目目录录:: IDispatch 接口原理与应用1 目录:1 前言:1 IDispatch 接口的定义:1 创建支持IDispatch 接口的COM对象:4 标准方式调用IDispatch 接口的方法:5 采用ATL智能指针类调用IDispatch 接口的方法:7 使用类COleDispatchDriver 调用IDispatch 的方法:11 前言: 前前言言:: 尽管com接口是跨语言的,但是很多语言在使用com时更多地通过 Automation 技术来和com对象通信。IDispatch接口是Automation 的核心技术。 尽管c++程序员并不喜欢甚至讨厌使用IDispatch 接口,因为调用它实在是非 常的麻烦而且易出错。但是不可否认大量的现存组件是只基于IDispatch 接口技 术而开发的,有时候你没有选择,而且如果你想要写一些组件能够在web上运 行,你也离不开IDisptch 接口,因为VBScript 这样的脚本语言不会聪明到能够 理解你的基于虚函数表的普通com接口。 与其躲避它,不如征服它。本文中,我将结合自己的经验和读者一起探讨 IDispatch 接口的各种应用。并介绍几种能够加快我们使用IDispatch接口的c++ 类。 IDispatch接口的定义: IIDDiissppaattcchh接接口口的的定定义义:: 参照文件oaidl.h 中的定义 MIDL_INTERFACE0000-0000-C000-000000000046) IDispatch : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount( /* [out] */ UINT *pctinfo) = 0; virtual HRESULT STDMETHODCALLTYPE GetTypeInfo( /* [in] */ UINT iTInfo, /* [in] */ LCID lcid, /* [out] */ ITypeInfo **ppTInfo) = 0; virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames( /* [in] */ REFIID riid, /* [size_is][in] */ LPOLESTR *rgszNames, /* [in] */ UINT cNames, /* [in] */ LCID lcid, /* [size_is][out] */ DISPID *rgDispId) = 0; virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke( /* [in] */ DISPID dispIdMember, /* [in] */ REFIID riid, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS *pDispParams, /* [out] */ VARIANT *pVarResult, /* [out] */ EXCEPINFO *pExcepInfo, /* [out] */ UINT *puArgErr) = 0; }; 我们通过IDispatch的GUID到注册表中搜索,可以搜索到如下结果: 注意在IDispatch 接口GUID下面还有两个展开的GUID项,他们分别是 ITypeInfo 和ITypeLib 接口。这两个接口在自动化应用中也是非常重要的。今后 我们会经常看到他们。 IDispatch 接口方法简介:

文档评论(0)

1亿VIP精品文档

相关文档