一个简单的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");了。
当然由于没有将编写好的组件添加到注册表中,并不能像真正的组件哪像使用,后面我将会给出如何注册一个自己编写的组件。
- 一个简单的com组件的实现
- 实现一个最最简单的COM组件
- 编写一个简单的COM组件
- 一个最简单的com组件的例子(C++)
- 2.实现一个最简单的COM
- 用ATL编写一个简单的COM组件
- 基于COM的轻量级组件技术的简单实现
- 【存档】简单的com组件
- 简单的ATL COM组件
- 创建COM组件的实现(或者叫作注册Com组件)
- [如何简单的理解com组件]
- 如何简单的理解com组件
- C#中写简单的COM+组件
- 简单调用自己写的COM组件
- COM一个简单的例子
- 一个简单的COM程序
- 一个比较简单的COM
- jquery实现一个简单的弹出框(www.lnctime.com)
- bat 的妙用
- SQL前一天、前一个月、前一年写法
- VMware三种网络模式根本区别
- 关于有功 无功 感性 容性 母线电压一系列问题的探讨
- java基础
- 一个简单的com组件的实现
- Gedit 有用插件介绍
- 学习笔记——关于C#中的两个short类型相加变成了int类型
- 玻璃碎了俺的心也碎鸟~iPhone4要杯具到底
- fopen 文件结尾 1A问题
- oracle 调用存储过程和函数返回结果集
- asp.net路径
- Android进程与线程
- ASP.NET上传视频文件同时转换为flv并且抓取第一帧生面图片源码分析