`

静态连接库、动态连接库、和com组件

阅读更多

区别:

(1)静态连接库作为目标代码的一部分被链接

(2)  动态连接库和目标代码是两个部分

(3)  COM组件通过在注册表中注册动态库的位置和接口进行调用

优缺点:

(1)静态缺点:使目标程序体积增大,不太灵活  
  (2)动态链接库优点:使程序模块化,只要保证接口函数不变,更改DLL内部实现的细节,不会导致调用失败,不过不能解决引用计数等问题  
  (3)COM很好的解决了DLL不能解决的一些问题。  

DLL与com的区别:

 

     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快

分享到:
评论

相关推荐

    中间件实例,动态链接库实例及调用实例,静态态链接库实例及调用实例,单接口COM组件,多接口COM组件

    中间件实例,动态链接库实例及调用实例,静态态链接库实例及调用实例,单接口COM组件,多接口COM组件,不同的创建实例及调用实例!

    可视化图表通用组件库,主要由Antv静态图表、Axhub动态图表、地图组件素材三部分内容数据可视化图表组件库

    本作品是由AxueUX整理的一套数据可视化图表通用组件库,主要由Antv静态图表、Axhub动态图表、地图组件素材三部分内容组成,其中包含了几十种常用图表类型和全国34个省级行政区地图,可以满足大部分的原型设计图表...

    Axure数据可视化图表组件库(AxureUX图表+地图)

    一套数据可视化图表通用组件库,主要由Antv静态图表、Axhub动态图表、地图组件素材三部分内容组成,其中包含了几十种常用图表类型和全国34个省级行政区地图,可以满足大部分的原型设计图表展示需求。 Antv静态图表...

    Axure数据可视化图表组件库(AxureUX整理).rar

    本作品是由AxueUX整理的一套数据可视化图表通用组件库,主要由Antv静态图表、Axhub动态图表、地图组件素材三部分内容组成,其中包含了几十种常用图表类型和全国34个省级行政区地图,可以满足大部分的原型设计图表...

    Microsoft Visual C++(VC运行库)运行库

    VC运行库通常指的是Microsoft Visual C++运行库,它是用于支持由Microsoft Visual Studio开发的软件或游戏运行的一组动态链接库(DLL文件)。这些文件包含了一系列常用的函数和工具,如内存管理、输入输出、字符串...

    易语言5.0正式版破解补丁

     静态编译后的易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前的独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...

    Axure WEB端通用组件交互规范手册 (Axure RP9作品).zip

    即使相关组件提供了带动态交互效果的版本,但是在实际设计时,如果没有特别的要求,为了提升输出效率我们仍然建议使用静态示例加标注的方式代替动态组件,特别是对于一些涉及大量表单和信息展示的系统类中后台系统,...

    易语言5.0正式版破解补丁(打开验证易文件,运行验证即可)

     静态编译后的易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前的独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...

    易语言支持库

    F:\ISO\=]易语言视频[=模块[=\易语言支持库\动态链接库辅助支持库v1.0.rar F:\ISO\=]易语言视频[=模块[=\易语言支持库\动态选择夹支持库 (1.1#2版).rar F:\ISO\=]易语言视频[=模块[=\易语言支持库\多文档界面(MDI...

    Visual C++中调用DLL实现数据加密

    摘 要:介绍了动态链接库这种模块复用方法及在VC中对它的调用,并给出了一个通过复用来实现数据加密的具体实例。引言 模块化思想贯穿于软件工程各个发展阶段,模块复用是构建大系统的一种重要思想。模块复用方法有...

    Qt5.5.0 patch for MinGW in MSYS2

    在Qt 5.5.0官方原版源代码基础上针对MSYS2环境的MinGW编译器修改: 1.动态链接版本Qt可编译源码自带的ANGLE、...8.提供自动化编译链接、安装脚本makeinstall,可自动检测和拷贝动态链接版本的Qt所依赖的动态链接库

    易语言5.0 测试版3破解补丁【完美破解补丁】

    注意:静态编译后的易语言EXE和DLL之间不能再共享“某些”句柄或资源,这一点和原动态连接时的程序行为不能保持一致,使用时请务必设法避免此类用法(MYSQL支持库我们作了特别处理)。 注意:静态编译后常量数据...

    NiceBASIC测试版3

    WIN32 DLL 动态链接库。导出函数可以为多种调用约定,比如:Stdcall(标准WINAPI)、 Cdecl(兼容C语言)、Pascal 。可供给其它语言使用。 静态链接库。供给标准的C语言调用链接。就是说NB的静态库是兼容C语言的LIB,...

    易语言-易语言编写支持库模版,组件、命令、常量等

    也就是说动态库要用黑月编译 不想用黑月的请自行方便 嗯,本人非美化出身,图标丑了谅解下 本模版采用支持库第二版 何为第二版?(详细请见 e\sdk\cpp\docs.txt) 易支持库有两个版本的开发包:2003.5 和 2008.5 两个...

    易语言程序免安装版下载

     静态编译后的易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前的独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...

    易语言-易语言编写支持库模版,动、静态版

    设置_静态库模式() 方法, 用于指定静态库的导出函数名 !!! [-]对 类_写易库.添加命令() 做了改动,主要修改链接名 !!! [-]修复易语言无法读取链接名的BUG ========== 1.易支持库机制 ========== !!!易...

    NiceBASICV 1.0中文编程正式版【MSI安装版】

     三、WIN32 DLL 动态链接库。导出函数可以为多种调用约定,比如:Stdcall(标准WINAPI)、 Cdecl(兼容C语言)、Pascal 。可供给其它语言调用。  四、静态链接库。供给标准的C语言调用链接。就是说NB的静态库是兼容...

    NiceBASIC V1.0中文编程正式版(绿色版).rar

     三、WIN32 DLL 动态链接库。导出函数可以为多种调用约定,比如:Stdcall(标准WINAPI)、 Cdecl(兼容C语言)、Pascal 。可供给其它语言调用。  四、静态链接库。供给标准的C语言调用链接。就是说NB的静态库是兼容...

Global site tag (gtag.js) - Google Analytics