一个简单的com组件的实现

来源:互联网 发布:记录资金曲线软件 编辑:程序博客网 时间:2024/04/28 15:17

1.什么是com

 

com是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。

 COM组件由以Win 32动态连接库(DLL)或可执行文件(EXE)形式发布的可执行代码所组成。遵循COM规范编写出来的组件将能够满足对组件架构的所有要求。COM组件可以给应用程序、操作系统以及其他组件提供服务;自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序;COM组件可以动态的插入或卸出应用。

2.动态链接库

   先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。

  静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

 

   下面将给出一个利用dll实现的组件,当然这个组件并没有完全实现,缺少将组件添加到注册表中的功能。

组件

   在该组件中我们实现了IX和IY的接口,IX和IY借口约定该组件必须提供Fx和Fy方法的实现。

 

query.h

 

 

在该头文件中我们定义了一些宏,这些宏是为了我们定义组件和使用组件的方便性而定义的,在定义组件时通过#define DLLEXPORT 就可以给出一个动态链接库中定义的函数,而在使用时因为没有田间#define DLLEXPORT宏所以是导入定义好的函数。

query.cpp

 

正如上面提到的那样,在该组件定义文件中,我们定义了DLLEXPORT宏,所以导入头文件是这一部分

#define DLLFUNCTION _declspec(dllexport)

#define DLLINTERFACE extern "C" interface _declspec(dllexport)

#define DLLCLASS extern "C" class _declspec(dllexport) 

当用这些宏来修饰函数时,表明这是dllexport 的即是定义函数。

guids.cpp

 

这一部分是定义IID,通过guidgen工具生成,没有什么需要解释的。

编译生成query.dll,query.lib,query.h文件可以将这几个文件copy到你自己新建的一个文件夹下面,并将这个文件夹添加到系统路径中,并导入客户端使用时导入query.lib.

 

客户端

 

test.cpp

 

 

 

需要解释的是create.h文件现在可以不用导入,这是后来新增的。这样子就是一个简单的使用com组件的例子。

 

再进一步解释一下create.h文件。

 

其实这是另外定义了一个组件导入函数,这样子就可以方便地通过制定的dll导入需要的组件真正实现动态链接的功能,其定义在另一个dll中。

create.h

 

 

create.cpp

 

 

按上面说过的同样的方式处理create.dll,create.lib和create.h就可以如同test.cpp中注释掉的IUnknown* pIUknown=CallCreateInstance("querylink.dll");了。

当然由于没有将编写好的组件添加到注册表中,并不能像真正的组件哪像使用,后面我将会给出如何注册一个自己编写的组件。

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 父母伤亡的孩子怎么办 小孩上课老是走神怎么办 小孩上课老走神怎么办 小孩上课爱走神怎么办 孩子对学习成绩无所谓怎么办 孩子脾气特别倔强怎么办 没有规矩的孩子怎么办 孩子情商太低怎么办 4岁宝宝缺乏自信怎么办 孩子害羞不自信怎么办 说话脸红的人怎么办 胆小自卑不自信怎么办 孩子爱挑衣服怎么办 厌学症的孩子怎么办 小孩太自死了怎么办 宝宝老是得肺炎怎么办 社保卡断档了怎么办 北京儿童怎么办医保卡 股票开户不用了怎么办 高中生玩游戏父母怎么办 高中生爱玩游戏怎么办 宝贝发烧不退烧怎么办 孩子行笔速度慢怎么办 孩子不会读英语怎么办 太注意小孩考试成绩怎么办 二年级成绩很差怎么办 班级差生应该怎么办 班级差生太多怎么办 初三孩子英语差怎么办 初三英语基础差怎么办 学生学习效率低怎么办 摔伤后皮下血肿怎么办 孩子学习效率低怎么办 很多作业没写完怎么办? 小学孩子成绩差怎么办 孩子脚上起水泡怎么办 小学一年级体育课哑铃怎么办 托福成绩失效后怎么办 去外国旅游不适应怎么办 一年级语文成绩差怎么办 一年级小孩成绩差怎么办