理解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接口设计的好,应该也能够很好的完成模块化的开发任务吧。

猜你喜欢

转载自blog.csdn.net/tom06/article/details/77966615