`

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

分享到:
评论

相关推荐

    C#使用OpcNetApi_dll和OpcNetApi_Com_dll操作OPC

    首先,OpcNetApi_dll和OpcNetApi_Com_dll是由OPC Foundation提供的API,它们分别是.NET和COM接口的实现,用于与OPC服务器进行通信。OpcNetApi_dll是.NET版本的API,适用于.NET Framework环境,提供了更现代、面向...

    COM接口和DLL接口函数查看器.zip

    与COM接口不同,DLL接口通常不涉及对象的概念,而是直接提供函数调用。使用“DLL接口函数查看器”,用户可以查看DLL文件中导出了哪些函数,这对于理解和使用第三方库,或者分析系统动态链接库的功能非常有帮助。 ...

    Dll 修复工具 DLL-FiLes com Fixer 3.3.9 中文多语免费版.zip

    DLL-FiLes com Fixer 3.3.9 中文特别版能够扫描您系统的注册表错误。这些错误通常源自您的电脑上已安装和/或已卸载的各种软件。它们常常是电脑速度变慢的原因。深入扫描、描、清理和优化您的注册表,以便提升您的...

    msvcp60d.dll/msvcrtd.dll等dll类缺失解决方案

    另外,压缩包中的“msvcrtd_downcc.com.zip”和“MSVCP60D.DLL_XiTongZhiJia.zip”可能分别包含了msvcrtd.dll和msvcp60d.dll的下载链接或文件本身。解压这些文件后,按照注册说明.txt的指示进行操作,可能是先下载...

    comport封装dll

    COM Port是计算机硬件接口,常用于与外部设备如打印机、扫描仪或串行模块进行通信。DLL是一种可执行文件,其中包含可由多个程序同时调用的函数和资源。 描述中提到"comport封装成dll,接收数据用回调函数",这意味...

    COM口通讯(DLL)

    COM口通讯是计算机硬件接口的一种,常用于设备间的串行通信。DLL(Dynamic Link Library)是一种Windows操作系统中的库文件,它...在处理与外部硬件交互或需要进行简单串行数据交换的项目中,这样的DLL文件非常实用。

    rxtxParallel.dll和rxtxSerial.dll

    总的来说,'rxtxParallel.dll'和'rxtxSerial.dll'是开发者进行硬件通信的重要工具,尤其对于那些需要与物理世界交互的Java应用程序来说,它们是必不可少的库文件。了解并熟练掌握这两个插件的使用,将极大地提升开发...

    DLL fixer(DLL 错误修复)

    5. **系统兼容性问题**:如果你使用的是旧版本的DLL文件与新版本的软件,可能会出现不兼容问题。 解决这类问题的一种方法是使用像“Dll-Files.com Fixer 绿色版”这样的工具。这个工具专注于查找和修复DLL相关的...

    Comm.jar;win32com.dll

    其次,"win32com.dll"是一个Windows平台上的动态链接库,它是Microsoft的COM(Component Object Model)框架的一部分,主要用于自动化任务和与其他软件组件交互。在串口通信领域,"win32com.dll"可能被用来创建COM...

    Register COM DLL(注册DLL的API组件)

    DLL(Dynamic Link Library)是实现这些COM组件的一种常见形式。在Windows上,为了使其他程序能够使用COM DLL,必须先通过特定的API函数进行注册。 描述中提到的“Delphi源代码”和“VB6动态注册DLL的DEMO”表明这...

    QRCode所需dll

    "QRCode所需dll"这个标题指的是为了实现二维码生成和解析功能,开发者需要引入的动态链接库(DLL)文件。这些DLL文件通常包含了实现二维码相关功能的API和类,使得.NET应用程序能够轻松地处理二维码的编码和解码。 ...

    delphi 生成和调用com,dll,服务程序小例子

    总结来说,这个Delphi示例涵盖了三个关键点:COM组件的创建与调用,DLL的生成与使用,以及服务程序的开发。通过理解这些技术,开发者可以在Delphi环境中构建更复杂、更灵活的系统,实现跨进程通信和后台任务的高效...

    dll及com组件区别

    ### DLL与COM组件的区别 #### 引言 随着软件工程的发展,模块化编程变得日益重要。在Windows平台下,DLL(动态链接库)与COM(组件对象模型)都是实现代码重用的重要方式。本文旨在深入探讨DLL与COM之间的区别及其...

    PHP7.4 的扩展库,dll文件

    php_com_dotnet.dll php_curl.dll php_dba.dll php_enchant.dll php_exif.dll php_ffi.dll php_fileinfo.dll php_ftp.dll php_gd2.dll php_gettext.dll php_gmp.dll php_imap.dll php_intl.dll php_ldap.dll ...

    利用POSDLL.dll动态库,对通用的POS打印机进行串口,并口,网口的控制

    在串口通信方面,`POSDLL.dll`可能使用标准的COM端口进行数据传输。这涉及到设置波特率、奇偶校验、数据位和停止位等参数。并口通信则基于LPT端口,而网口通信可能通过TCP/IP协议实现,需要配置IP地址和端口号。 ...

    C++ COM实现之一 创建一个DLL

    每个已安装的组件都有一个与之对应的GUID,这些GUID可以通过注册表中的`InprocServer32`子关键字找到DLL文件的确切路径。 ##### 3.3 注册函数 为了使DLL能够自动注册其包含的组件,需要实现两个函数: - `Dll...

    MFC调用COM组件的dll源码

    本资源“MFC调用COM组件的dll源码”提供了使用MFC来调用COM组件DLL的基础示例。在Windows编程中,MFC调用COM组件是常见的技术实践,它可以帮助开发者复用已有的COM组件功能,提高开发效率。 首先,了解COM组件的...

    OPCDaAuto.dll组件

    OPCDaAuto.dll组件是OPC(OLE for Process Control)技术中的一个重要组成部分,主要用于在C#等编程语言中实现与OPC服务器的交互。OPC是一种标准接口,它允许不同的自动化设备和软件之间进行通信,尤其在工业自动化...

    DLL-FILESClient2019(dll修复软件)V2.3.0.7496中文安装版

    DLL-FILES Client是一款十分不错的DLL文件丢失修复工,软件支持所有的Windows系统使用,里面汇集了大量的DLL文件,基本上你需要的DLL文件这里都有,本站提供的是...只需一次单击,DLL-files.com Client 就可查找您需要

Global site tag (gtag.js) - Google Analytics