• 静态连接库、动态连接库、和com组件 (ZZ)


    区别:

    (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快

  • 相关阅读:
    [ html canvas getImageData Object.data.length ] canvas绘图属性 getImageData Object.data.length 属性讲解
    [ html canvas 模仿支付宝刮刮卡效果 ] canvas绘图属性 模仿支付宝刮刮卡效果实例演示
    [ javascript html Dom image 对象事件加载方式 ] 对象事件加载方式
    [ javascript New Image() ] New Image() 对象讲解
    Django安装及环境配置
    python使用opencv实现人脸识别系统
    redis 操作常用命令
    关于Python获取SQLSERVER数据库中文显示乱码问题
    Topshelf创建windows服务初探
    Js获取ip地址
  • 原文地址:https://www.cnblogs.com/zhangjun1130/p/1822232.html
Copyright © 2020-2023  润新知