加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

QI浅谈

发布时间:2020-12-16 23:18:33 所属栏目:大数据 来源:网络整理
导读:本节课我们来探讨下 QI 的使用 接触 AO 也有些许时日了 对 QI 的理解也有些新的体会 正好在此总结一下 与大家分享: 已经知道大部分 AO 以 Iunknown 为缺省接口 也知道 VB 不提供任何 Iunknown 方法 即是 QI ( queryinterface ) addref 与 release 那么什

本节课我们来探讨下QI的使用 接触AO也有些许时日了 QI的理解也有些新的体会 正好在此总结一下 与大家分享:

已经知道大部分AOIunknown为缺省接口 也知道VB不提供任何Iunknown方法 即是QIqueryinterface addrefrelease 那么什么是Iunknown接口呢 有什么用呢?

所有COM接口都源于Iunknown接口 而且所有COM对象都必须实现这个接口 Iunknown接口 执行两个任务:一是 控制对象的生命周期 二是提供运行时的类型支持。。。。。。(关于COMIunknown接口相关知识请大家自行了解)

现在假设一个类Foo支持三个接口:Iunknown(缺省接口) Ifoo接口 Ibar接口 这意味着如果用下面的代码来声明变量PFoo PFoo变量会指向Iunknown接口

Dim PFoo as new Foo create a new Foo object

由于VB不允许直接访问Iunknown接口 必须间接的使用QI查询具有需要调用的方法的一个接口 因此声明一个保存指向接口的指针变量的正确方法如下:

Dim PFoo as IFoo variable will hold pointer to IFoo interface

Set PFoo=new Foo create instace of Foo object and QI for IFoo

Dim PBar as IBar dim variable to hold pointer to interface

Set PBar=PFoo QI for IBar interface

其实在实例化一个对象的时候 请求哪个接口是不受限制的 任何支持接口都可以被请求

Dim PBar as IBar

Set PBar=new Foo

Set PFoo=PBar QI for interface

到这里相信大家对QI基本上都理解了吧 呵呵

接口查询一般都实在一个类型不同接口间查询时候使用的(特殊情况也有吧)因为接口之于类而言 里面的定义在一个实例化后的类里均已经都实现了 由于接口的声明使用的是一个指针 故可以把此指针指向另外一个接口 这样就实现了QI 当然此接口在类中也已经实现了 可见QI与类的实例化有密切关系啊

好了 请大家看这个代码:

Dim pmap as Imap

Set pmap=new map

Pmap.clearlayer()

Pmap.clear()

大家看看这段代码有什么问题?

提示:Imap接口里并没有clear方法 但是IActiveView有这个方法 并且IActiveViewmap类的一个接口 请读者自行修改!

本节课到此为止!Good Luck giser

http://hi.baidu.com/gis%C0%ED%CF%EB/blog/item/a16fa63d00072fe93c6d974a.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读