大佬教程收集整理的这篇文章主要介绍了QI浅谈,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
本节课我们来探讨下QI的使用 接触AO也有些许时日了 对QI的理解也有些新的体会 正好在此总结一下 与大家分享: 已经知道大部分AO以Iunknown为缺省接口 也知道VB不提供任何Iunknown方法 即是QI(queryinterface) addref与release 那么什么是Iunknown接口呢 有什么用呢? 所有COM接口都源于Iunknown接口 而且所有COM对象都必须实现这个接口 Iunknown接口 执行两个任务:一是 控制对象的生命周期 二是提供运行时的类型支持。。。。。。(关于COM与Iunknown接口相关知识请大家自行了解) 现在假设一个类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有这个方法 并且IActiveView是@H_820_17@map类的一个接口 请读者自行修改! 本节课到此为止!Good Luck giser! http://hi.baidu.com/gis%C0%ED%CF%EB/blog/item/a16fa63d00072fe93c6d974a.html |
以上是大佬教程为你收集整理的QI浅谈全部内容,希望文章能够帮你解决QI浅谈所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。