COM和DLL的一些区别

com英文为Component Object Model(组件对象模型),是微软生产软件组件的标准。
它是构造二进制兼容软件组件的规范,不管组件应用何种语言编写只要遵循com规范就可以
相互直接通信。提出com规范主要是为了满足:
1.程序的快速开发,可以将一个大型的工程分成若干个com组件同时开发。
2.可以动态的插入或卸载com组件。
3.可以隐藏或封装com组件内部的实现细节。
com组件可以由不同的语言进行编写,但com组件之间的通信是通过组件的接口来实现的,
com组件接口的实现是统一的,它采用的是虚拟函数表(VTBL)形式。虚拟函数表中包含了
组件函数的一组指针,我们可以通过这组指针来获取我们想要通信的组件函数的内存地址。
dll(动态链接库)是包含函数和数据的模块的集合。它可以导出数据也可以导出函数以供
其它的dll调用。dll的加载可以通过静态链接和动态链接两种方式。
1.静态链接时将所要链接的dll模块以二进制的形式编译进其他模块。
2.动态链接指调用模块在运行时加载DLL,使用LoadLibrary函数或LoadLibraryEx
函数将dll 加载到进程的地址空间,并调用GetProcAddress函数以获取导出的 DLL
函数的地址。
动态加载dll的优点:
1.DLL可节省内存并减少交换。通过在内存中共享 DLL 的单个副本,多个进程可以同时
使用一个DLL。相比之下,对于使用静态链接库构建的每一个应用程序,Windows 都要
在内存中为其加载库代码的一个副本。
2.DLL 可节省磁盘空间。 多个应用程序可以共享磁盘上的一个 DLL 副本。相比之下,
使用静态 链接库构建的每一个应用程序都需要让链接到程序文件映像的库代码作为一个
单独的专用副本。
dll与com的关系:com是一种规范,按照是com规范实现的dll可以被视为com组件,
例如我们用mfc建立的Active X控件工程其中的接口封装是靠idl描述的所以可以视为
com组件。而且从上面关于com和dll的说明可以看出com组件的接口是一组具有特定规范的
函数,所以com组件可以别视为dll但dll不一定是com组件。
com和DLL最大的区别就是: dll是以函数集合的方式来调用的是编程语言相关的象VC必须
加上extern "C"...而COM是以interface的方式提供给用户使用的是一种二进制的调用
规范,是与编程语言无关的,它使用idl接口定义语言来描述自己使用类继承来实现自己的功能
和方法.DLL只有DLL一种形势,里面可任意定义函数无限制,只能运行在本机上 而COM
有DLL和EXE两种存在形势: COM所在的DLL中必须导出四个函数:
dllgetobjectclass, dllregisterserver, dllunregisterserver,
dllunloadnow
这四个函数各有作用,有些是提供给COM管理器用的,通过CLSID和IID来使用,有些是提供
给注册机用的.
COM结合MTS,就是COM+, 是DCOM的高级版本,提供了更为强大和安全的分布式COM服务,
DCOM运行在不同的机器上 用proxy和stub来实现远程接口的本地映射 二者从执行速度来
说 二者相差无几 但是启动速度DLL要比COM快!

时间: 2024-10-30 08:17:27

COM和DLL的一些区别的相关文章

lib和dll文件的区别和联系

什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37)    (1)lib是编译时需要的,dll是运行时需要的. 如果要完成源代码的编译,有lib就够了. 如果也使动态连接的程序运行起来,有dll就够了. 在开发和调试阶段,当然最好都有. (2)一般的动态库程序有lib文件和dll文件.lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的.如果有 dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中.如果只有lib

Activex、OLE、COM、OCX、DLL之间的区别(转)

先明确组件(Component)和对象(Object)之间的区别: 组件是一个可重用的模块,它是由一组处理过程.数据封装和用户接口组成的业务对象(Rules Object).组件看起来像对象,但不符合对象的学术定义. 它们的主要区别是: 1)组件可以在另一个称为容器(有时也称为承载者或宿主)的应用程序中使用,也可以作为独立过程使用: 2)组件可以由一个类构成,也可以由多个类组成,或者是一个完整的应用程序: 3)组件为模块重用,而对象为代码重用.现在,比较流行的组件模型有COM(Component

Activex、OLE、COM、OCX、DLL之间的区别

先明确组件(Component)和对象(Object)之间的区别: 组件是一个可重用的模块,它是由一组处理过程.数据封装和用户接口组成的业务对象(Rules Object).组件看起来像对象,但不符合对象的学术定义. 它们的主要区别是: 1)组件可以在另一个称为容器(有时也称为承载者或宿主)的应用程序中使用,也可以作为独立过程使用: 2)组件可以由一个类构成,也可以由多个类组成,或者是一个完整的应用程序: 3)组件为模块重用,而对象为代码重用.现在,比较流行的组件模型有COM(Component

Com组件和Dll文件区别

[转]COM组件和DLL的区别 2014-8-14阅读169 评论0 com英文为Component Object Model(组件对象模型),是微软生产软件组件的标准. 它是构造二进制兼容软件组件的规范,不管组件应用何种语言编写只要遵循com规范就可以相互直接通信.提出com规范主要是为了满足: 1.程序的快速开发,可以将一个大型的工程分成若干个com组件同时开发. 2.可以动态的插入或卸载com组件. 3.可以隐藏或封装com组件内部的实现细节. com组件可以由不同的语言进行编写,但com

(转载)DLL动态链接库编程入门之五:MFC扩展DLL

MFC扩展DLL的内涵为MFC的扩展,用户使用MFC扩展DLL就像使用MFC本身的DLL一样.除了可以在MFC扩展DLL的内部使用MFC以外,MFC扩展DLL与应用程序的接口部分也可以是MFC.我们一般使用MFC扩展DLL来包含一些MFC的增强功能,譬如扩展MFC的CStatic.CButton等类使之具备更强大的能力. 使用Visual C++向导生产MFC扩展DLL时,MFC向导会自动增加DLL的入口函数DllMain: C++代码 extern "C" int APIENTRY

在C#调用C++的DLL方法(二)生成托管的DLL

写操作之前,还是扼要的说一下托管与非托管C++的区别好了,其实我也并没有深入了解过托管C++的特点所在,其最大的特征就是可以由系统来调试回收相关的代码资源,跟C#的特性一样,只是编程风格跟C++类似而已,因此,这决定了C#与托管C++是可以完美结合在一起的.托管C++生成的dll跟C#生成的dll应该说是没区别的,之所以产生托管C++这种怪物,完全是因为微软在极力推崇C#,必须要兼顾不同语言间交互. 好吧,接下来正经的写一下过程.先摆出目的:我手上有一个C++写的类(NativeClass),想

C# 带签名dll破解

首先申明,本文只是从技术的角度来分析下怎样破解带签名的C#写的dll文件.大家如有遇到收费的软件或类库还是应该去购买正版,程序员何苦为难程序员呢. 不带签名的破解 不带签名的dll文件的破解很简单,通常有下面三个步骤: 1. 使用反编译工具对dll文件进行反编译,找到校验过期的相关代码,反编译工具可以使用ILSpy或Reflector; 2. 使用ildasm.exe工具将dll导出成il文本文件,在该文件中找到相关的代码进行修改: 3. 使用ildasm.exe工具将修改后的il文件编译成dl

深入理解DLL文件

1.LIB与DLL文件的区别 DLL是一个完整的程序,称为“动态链接库”,DLL中包含的主要有三块内容:1.全部变量 2.函数接口 3.资源:DLL中有一个函数导出表,其中每一项都是一个函数名称.通过一定的方式连接这些函数接口,来调用这些函数的功能. dll有两种加载方式:隐式链接和显式链接. dll一般会有对应的导入库,方便程序进行隐式链接加载,否则就需要自己LoadLibary调入DLL文件,然后再GetProcAddress获得对应函数了(即显示链接加载dll方式).有了导入库,你只需要链

转一篇DLL逆向的文章,适用于一般的dll逆向

转一篇DLL逆向的文章,适用于一般的dll逆向,我使用的库是一组DLL,都有强签名,如下方法不适合,编译会提示强签名错误. C# 带签名dll破解 Mar 9, 2016 | C# | 84 Hits 转自 http://blog.fwhyy.com/2016/03/csharp-with-signature-dll-crack/?utm_source=tuicool&utm_medium=referral 暂无评论 首先申明,本文只是从技术的角度来分析下怎样破解带签名的C#写的dll文件.大家