论文部分内容阅读
摘 要:通过网页我们可以将COM组件分发给用户,从而为客户端用户提供服务。其中服务的概念非常广泛,它可以是相应网站,也可以是应用程序。通过它可以使许多软件工作能够放在网络上完成,服务器端提供满足客户下载需要的软件及软件的最新版本号,并提供在线安装组件,用户在客户端接收并可以自动运行,实现软件服务的自动化。 本文通过实例阐述了COM组件的多种应用方式,并给出了代码。
关键词:DLL Class Factory IUnknown COM
中图分类号:TP3 文献标识码:A 文章编号:1674-098X(2011)12(c)-0000-00
Component Object Model 是一个重要的概念。我们把一个完整的EXE文件分割成功能不同,但相对独立的几部分即组件,然后拼装起来组成程序。在未来发布后,如果业务有变,则可以替换或升级相应组件就可以了。这也是我们在软件技术中,最终拼装程序的手段。文章首先对COM组件进行了描述,然后详细讲解了COM的应用,这里分了八种情况进行了讲解。
1 COM描述
COM是模块化编程的一种方法,从代码重用的角度来看,COM技术的复杂性是函数和动态链接库所无法比拟的。COM是一种集成技术,它可以在运行时将软件融合在一起,不必考虑他们是用什么语言编写的。COM采用二进制级代码表示,这也使得它具有语言无关性。分布式COM允许不同型号机器上运行的程序之间通讯。
1.1 C++描述COM接口
struct ILink : public IUnknown//接口就是结构体类型的数据结构
{ virtual BOOL Link()=0;} ;//只有成员函数,且是纯虚函数
struct ITran : public IUnknown // ILink为建立连接, ITran传输数据
{ virtual void send()=0; virtual void receive()=0;} ;
class mynet : public ILink , public ITran//COM类
{ BOOL Link() {处理;}void send() {处理;} void receive(){处理;} };
1.2 嵌套类解决函数重名
class mynet : public ILink , public ITran
{ class Clink public IUnknown
{ virtual BOOL Link()=0; } m_link;
class CTran public IUnknown
{ virtual void send()=0;virtual void receive()=0;} m_tran;
friend class Clink; friend class CTran; };
1.3 通过接口访问COM
CLSID:COM全球唯一标识;GIID:COM接口全球唯一标识;考虑因素:网卡号,产生时间
HRESULT GetClassObject(REFCLSID rclsid,REFIID riid,LPVOID *ppv)
获得指向接口的指针;
1.4 IUnknown接口
COM中有一个IUnknown接口,所有COM接口都必须从它继承,其中定义了三个函数。
struct IUnknown { public:
virtual HRESUAL QueryInterface()=0;//查询接口的工作;
virtual ULONG AddRef()=0;//返回计数器m_dwref;
virtual ULONG Release()=0;//delete this;} ;
1.5 类厂(Class Factory)
COM中有一个特殊接口,即IClassFactory接口,它由IUnknown接口继承,负责创建对象。COM暴露的只是接口,且无构造函数。
struct IClassFactory : public IUnknown
{ HRESULT CreateInstance(REFIID riid,void ** ppvobject)=0; };
class MynetClassFactory : IClassFactory
{ HRESULT CreateInstance(REFIID riid,void ** ppvobject);};
2 COM应用
如何将COM填加到网页中是很重要的一个应用点,对此笔者进行了研究:(1)应用是:EXE程序+COM组件;(2)应用是:ASP网页基于IIS的网站+COM组件;(3)应用是:JSP网页基于Tomcat的网站+COM组件;
应用点的几个技术:(1)通过ASP页面传送并执行COM组件;(2)通过JSP页面传送并执行COM组件;(3)通过COM组件下载EXE程序;(4)通过EXE程序访问网页;(5)在ASP网页中执行EXE程序;(6)通过JSP或Java执行EXE程序;(7)注册与卸载COM组件;(8)设置程序自动执行。
2.1 通过ASP页面传送并执行DLL
2.3 通过DLL下载EXE程序
2.4 通过EXE程序访问网页
2.5 在ASP网页中执行EXE程序
2.6 通过JSP或Java执行EXE程序
2.7 注册与卸载注册DLL
3 结语
在COM设计中我们看到了DLL的应用,如果要编写模块化的COM软件,就会对动态链接库(DLL)非常感兴趣。虽然C++类也是模块,但类是“创建时”模块,而DLL是“运行时”模块。在编写大的EXE程序时,每次修改后,都要重新编译,如果采用较小的DLL模块,则可以单独进行调试。客户程序搜索DLL的顺序为:包含EXE文件的目录;进程的当前目录;Windows系统目录;Windows目录;列在Path环境变量中的目录。因此,生成的DLL文件最好拷贝到测试程序所在的目录。有了以上的技术,我们就可以在网页中灵活的嵌入COM组件,完成自动打开任一网站或自动下载并运行应用程序的目的,从而达到软件自动服务的目的。
关键词:DLL Class Factory IUnknown COM
中图分类号:TP3 文献标识码:A 文章编号:1674-098X(2011)12(c)-0000-00
Component Object Model 是一个重要的概念。我们把一个完整的EXE文件分割成功能不同,但相对独立的几部分即组件,然后拼装起来组成程序。在未来发布后,如果业务有变,则可以替换或升级相应组件就可以了。这也是我们在软件技术中,最终拼装程序的手段。文章首先对COM组件进行了描述,然后详细讲解了COM的应用,这里分了八种情况进行了讲解。
1 COM描述
COM是模块化编程的一种方法,从代码重用的角度来看,COM技术的复杂性是函数和动态链接库所无法比拟的。COM是一种集成技术,它可以在运行时将软件融合在一起,不必考虑他们是用什么语言编写的。COM采用二进制级代码表示,这也使得它具有语言无关性。分布式COM允许不同型号机器上运行的程序之间通讯。
1.1 C++描述COM接口
struct ILink : public IUnknown//接口就是结构体类型的数据结构
{ virtual BOOL Link()=0;} ;//只有成员函数,且是纯虚函数
struct ITran : public IUnknown // ILink为建立连接, ITran传输数据
{ virtual void send()=0; virtual void receive()=0;} ;
class mynet : public ILink , public ITran//COM类
{ BOOL Link() {处理;}void send() {处理;} void receive(){处理;} };
1.2 嵌套类解决函数重名
class mynet : public ILink , public ITran
{ class Clink public IUnknown
{ virtual BOOL Link()=0; } m_link;
class CTran public IUnknown
{ virtual void send()=0;virtual void receive()=0;} m_tran;
friend class Clink; friend class CTran; };
1.3 通过接口访问COM
CLSID:COM全球唯一标识;GIID:COM接口全球唯一标识;考虑因素:网卡号,产生时间
HRESULT GetClassObject(REFCLSID rclsid,REFIID riid,LPVOID *ppv)
获得指向接口的指针;
1.4 IUnknown接口
COM中有一个IUnknown接口,所有COM接口都必须从它继承,其中定义了三个函数。
struct IUnknown { public:
virtual HRESUAL QueryInterface()=0;//查询接口的工作;
virtual ULONG AddRef()=0;//返回计数器m_dwref;
virtual ULONG Release()=0;//delete this;} ;
1.5 类厂(Class Factory)
COM中有一个特殊接口,即IClassFactory接口,它由IUnknown接口继承,负责创建对象。COM暴露的只是接口,且无构造函数。
struct IClassFactory : public IUnknown
{ HRESULT CreateInstance(REFIID riid,void ** ppvobject)=0; };
class MynetClassFactory : IClassFactory
{ HRESULT CreateInstance(REFIID riid,void ** ppvobject);};
2 COM应用
如何将COM填加到网页中是很重要的一个应用点,对此笔者进行了研究:(1)应用是:EXE程序+COM组件;(2)应用是:ASP网页基于IIS的网站+COM组件;(3)应用是:JSP网页基于Tomcat的网站+COM组件;
应用点的几个技术:(1)通过ASP页面传送并执行COM组件;(2)通过JSP页面传送并执行COM组件;(3)通过COM组件下载EXE程序;(4)通过EXE程序访问网页;(5)在ASP网页中执行EXE程序;(6)通过JSP或Java执行EXE程序;(7)注册与卸载COM组件;(8)设置程序自动执行。
2.1 通过ASP页面传送并执行DLL
2.3 通过DLL下载EXE程序
2.4 通过EXE程序访问网页
2.5 在ASP网页中执行EXE程序
2.6 通过JSP或Java执行EXE程序
2.7 注册与卸载注册DLL
3 结语
在COM设计中我们看到了DLL的应用,如果要编写模块化的COM软件,就会对动态链接库(DLL)非常感兴趣。虽然C++类也是模块,但类是“创建时”模块,而DLL是“运行时”模块。在编写大的EXE程序时,每次修改后,都要重新编译,如果采用较小的DLL模块,则可以单独进行调试。客户程序搜索DLL的顺序为:包含EXE文件的目录;进程的当前目录;Windows系统目录;Windows目录;列在Path环境变量中的目录。因此,生成的DLL文件最好拷贝到测试程序所在的目录。有了以上的技术,我们就可以在网页中灵活的嵌入COM组件,完成自动打开任一网站或自动下载并运行应用程序的目的,从而达到软件自动服务的目的。