COM组件接口的实质及ArcGIS Object Model Diagram的理解
来源:互联网 发布:淘宝草根vr工厂 编辑:程序博客网 时间:2024/05/20 07:52
class IUnknown{public:virtual int QueryInterface(char*IName,void**ppv)=0;//查询接口virtual void Release()=0; //释放接口};
class IA:public IUnknown{public:virtual void f1()=0;virtual void f2()=0;};
class IB:public IUnknown{public:virtual void g1()=0;virtual void g2()=0;};
class A:public IA,IB{private:char*s1,*s2,*s3,*s4;public:A(){s1="This is f1()";s2="This is f2()";s3="This is g1()";s4="This is g2()";}virtual void f1(){cout<<s1<<endl;}virtual void f2(){cout<<s2<<endl;}virtual void g1(){cout<<s3<<endl;}virtual void g2(){cout<<s4<<endl;}virtual int QueryInterface(char*IName,void**ppv){if(IName=="IA"){*ppv = (IA*)(this);return 1;}else if(IName=="IB"){*ppv = (IB*)(this);return 1;}else return 0;}virtual void Release(){delete this;}};A*GreateInst(){return new A;}void CoGetInst(char*IName,void**ppv){A*a=GreateInst();a->QueryInterface(IName,ppv);}void main(){IA*pIA;CoGetInst("IA",(void**)&pIA);pIA->f1();IB*pIB;pIA->QueryInterface("IB",(void**)&pIB);pIB->g2();pIA->Release();}
一个很好的实例是关于ArcGIS二次开发的实例:
IMap pMap = axMapControl1.Map; IActiveView pActiveView = pMap as IActiveView; IGraphicsContainer pGraphicsContainer = pMap as IGraphicsContainer;Map类实现了IMap、IActiveView、IGraphicsContainer等等这几个接口;
在这里的A类就相当于Map类,在主函数中(即相当于客户端,完全屏蔽掉了类A),直接调用了A所接口。
这就是所谓COM组件中接口的机制。
0 0
- COM组件接口的实质及ArcGIS Object Model Diagram的理解
- 如何理解v-model的实质为语法糖
- "COM”:component object model,组件对象模型
- COM组件 IDispatch 及双接口的调用
- 对COM组件的理解
- 工作的实质的理解
- COM 组件接口的 IUnKnown 接口介绍
- C++ : 引用的实质理解 !!!!
- C++ : 引用的实质理解 !!!!
- 分布式组件对象Distribute Component Object Model(DCOM)的配置
- 引用COM组件Windows Script Host Object Model,创建快捷方式
- COM(Componet Object Model,组件对象模型)基本概念
- COM组件接口继承的实现
- COM组件接口继承的实现
- COM组件 接口(Interface)的来历
- COM组件接口继承的实现
- 查看可执行文件(COM)组件的接口
- COM组件的接口和对象
- 开博了~
- 利用html5画出五角星画出星空
- ProjectEuler - 11
- PostGresQL 的方案Schema
- nginx 新手攻略 Ubuntu Linux下安装配置教程
- COM组件接口的实质及ArcGIS Object Model Diagram的理解
- 修改系统服务的启动类型并启动服务
- iOS多线程GCD(转)
- 第12周项目3 汉诺塔
- 似懂非懂双方的非官方然而他
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第五步)(9)
- VC6.0与Visio冲突问题解决方案
- 应该学会HTML和CSS的9大理由
- 事件冒泡的一些应用_利用事件冒泡处理多个事件[1]