`

静态连接库、动态连接库、和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快

分享到:
评论

相关推荐

    linux静态库和动态库

    - **性能开销**:动态链接需要额外的时间来加载和解析库。 #### 四、动态链接过程 当程序使用动态库时,动态链接的过程如下: 1. **加载ELF映像**:当用户启动一个应用程序时,实际上是加载了一个ELF映像。内核会...

    Linux下动态和静态链接库的使用

    在Linux系统中,链接库是实现程序功能复用的关键组件,分为静态链接库和动态链接库两种类型。本文主要探讨这两种库的创建、使用及其特点。 1. 静态函数库 静态库通常以`.a`为后缀,如`libxxx.a`。在编译过程中,...

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

    在IT领域,中间件、动态链接库、静态链接库以及COM组件是软件开发中的关键概念。下面将分别详细解释这些知识点。 1. **中间件**: 中间件是一种位于操作系统和应用程序之间的软件,它提供了服务和功能,帮助开发者...

    cmakelists 生成静态库,然后用静态库生成动态库,然后生成测试程序

    首先,我们要理解静态库和动态库的区别。静态库(.a 或 .lib)是在编译时将库代码直接嵌入到目标程序中,形成一个完整的可执行文件;而动态库(.so 或 .dll)则是在运行时被加载,多个程序可以共享同一份库资源,...

    GCC编译动态和静态链接库.pdf

    GCC 编译动态和静态链接库是 Linux 应用开发中的一个重要组件,对于嵌入式 Linux 应用开发来说尤为重要。本文将详细介绍如何在 Linux 中创建静态库和动态库,以及使用它们。 静态库 静态库是指在程序编译时被连接...

    linux静态库与动态库

    在Linux操作系统中,库文件是实现程序功能复用的关键组件,分为静态链接库(.a文件)和动态链接库(.so文件)。这两种类型的库在程序编译和运行时有着不同的工作方式。 静态链接库(.a文件)在程序编译期间被链接器...

    静态链接库的使用

    与动态链接库(Dynamic Link Library, DLL)不同,静态链接库在编译阶段就会被链接到目标程序中,成为可执行文件的一部分。这种方式使得最终生成的应用程序无需依赖外部的库文件,提高了应用程序的独立性和移植性。 ...

    wxWidgets静态链接库

    - 考虑到静态链接库会使可执行文件变大,如果你关心程序的体积,也可以考虑使用动态链接库,但这需要在目标机器上安装相应的库文件。 - 配置编译环境时务必仔细,错误的路径或遗漏的库可能导致编译失败。 总结,...

    Linux C++编译及 静态/动态 链接库 笔记

    这篇笔记主要探讨了在Linux环境下如何编译C++程序以及如何处理静态和动态链接库。以下是对这些知识点的详细说明: 1. **C++编译过程**: - C++程序的编译通常包括预处理、编译、汇编和链接四个步骤。预处理阶段...

    Jni测试引用第三方静态库和动态库demo

    本文将深入探讨如何在JNI中引用第三方的静态库(.a)和动态库(.so),并基于提供的"Jni测试引用第三方静态库和动态库demo"进行分析。 首先,我们需要了解静态库和动态库的区别。静态库是直接链接到目标程序中的,...

    openSSL头文件和静态库文件以及动态库

    总之,OpenSSL头文件和库文件是Win10下编译crtmpserver的关键组件。正确配置和使用这些文件,能够使你的应用程序具备安全的加密通信能力。同时,理解静态库和动态库的区别,有助于你在不同场景下做出合适的选择。在...

    链接库应用 动态链接库 源代码

    本主题将深入探讨链接库的应用,特别是动态链接库(DLL)和静态链接库(LIB),并涉及Win32环境下的开发以及MFC(Microsoft Foundation Classes)库的使用。 一、Win32动态链接库 (DLL) Win32动态链接库是Windows...

    OpenCV静态链接库

    在使用OpenCV静态链接库时,开发者可以将这些库直接编译进他们的应用程序,这样就不需要在运行时寻找和加载OpenCV的动态链接库。这简化了部署过程,因为用户不需要在目标系统上安装额外的库。然而,静态链接也有其...

    boost库1.68版本Linux下编译的动态库和静态库

    Boost库是C++编程语言的一个开源库集合,它提供了许多高效、跨平台的工具和库,以增强C++的功能和可扩展性。1.68版本是Boost的一个稳定版本,包含了许多更新和优化,旨在提高性能和兼容性。在Linux环境下,Boost库...

    静态链接库例子(lib)

    在选择使用静态链接库还是动态链接库时,需要权衡体积、依赖性、更新便捷性和资源利用等因素。 在实际开发中,了解如何创建、使用和管理静态链接库是非常重要的技能。通过这个简单的例子,你可以深入理解静态链接库...

    VS2017 32位 VTK-9.0.1编译生成库 静态库 动态库 lib文件和dll文件

    在本资源中,提供的是使用Visual Studio 2017(32位)编译的VTK-9.0.1版本的库文件,包括静态库和动态库。这些库文件对于开发C++应用程序,尤其是涉及到3D图形处理和数据可视化的项目至关重要。 首先,`VS2017 32位...

    十二、Qt自定义Widget组件、静态库与动态库.zip

    在`test45`、`test47`、`test46`、`test48`这些文件中,很可能是包含了Qt自定义组件的源代码示例,以及关于静态库和动态库创建和使用的教程。通过学习这些示例,开发者可以更好地理解如何在实际项目中应用自定义组件...

    linux pthread libc静态库

    此外,由于静态库的特性,如果`pthread`或`libc`有安全更新,使用静态编译的程序不会自动获取这些更新,因此在某些情况下,动态链接库可能是更好的选择。 总之,`pthread`和`libc`静态库是Linux开发中的重要组件,...

    深入浅出Visual_C++动态链接库(Dll)编程.pdf

    随着时间的推移,库的形式经历了从“无库—静态链接库—动态链接库”的演变过程。 - **静态链接库**:在编译过程中,静态库中的代码会被直接链接到最终的可执行文件(EXE)中。这意味着即使在程序运行时不再需要这些...

Global site tag (gtag.js) - Google Analytics