理解COM和DLL技术

最近由于需要做一个Visual Studio的插件,所以看了《ATL开发指南》,对COM技术有一个简单的了解,稍作记录,资励。

COM技术是

我们知道COM有跨语言优势,便于升级维护,实现进程间调用甚至分布式调用。

COM组件之间的通信是通过组件的接口来实现的,COM组件接口的实现是统一的,它采用的是虚函数表形式,表中包含了组件函数的一组指针,我们可以通过这组指针来获取我们想要通信的组件函数的内存地址。

DLL技术

一般模块化开发中,我们提供一个类库或框架,最好是提供源代码;但这往往涉及到知识产权保护和多次编译。

所以后来开发了DLL技术,DLL中导出一个需要提供给第三方使用的类,函数,数据等;以后DLL升级了,只要接口保持不变,使用者直接替换DLL文件,不用重新编译代码。由于采用动态链接,所以运行空间也能够节省。

传统的DLL方案是有缺陷的,每个编译器都会加入它自己的一些独特特性。比如使用VC++开发的,里面有异常处理代码,在其他IDE中使用这个DLL,它可能获取不了异常;

如果DLL导出类添加了成员变量,导致对象内存增加了,那么使用者直接替换DLL,会产生非法操作。

理解COM和DLL技术

对于DLL技术的缺陷,COM技术能够做的比DLL更好。

DLL是以函数集合的方式来调用的是编程语言相关的,而COM是以interface的方式提供给用户使用的是一种二进制的调用规范,是与编程语言无关的,它使用idl接口定义语言来描述自己使用类继承来实现自己的功能和方法。

DLL只有DLL一种形式,里面可任意定义函数无限制,只能运行在本机上,而COM 有DLL和EXE两种。

一般情况下

COM技术看起来挺复杂的,如果我并不想跨语言,只要DLL接口设计的好,应该也能够很好的完成模块化的开发任务吧。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值