1.问题阐述
C++类对象、DLL及COM都是面对向对象的,它们都实现了重用,避免了程序员重复造轮子的现象的产生。那么它们之间有什么区别呢?
2.实现技巧
C++对象重用是定义在源代码级别上的,而DLL和COM是定义在二进制级别上的重用,是执行代码重用的技术。
DLL和COM都实现了模块之间的通信,但是DLL对于内存的利用和数据类型使用没有一定的约束规范。而COM对数据、内存等其他的几个方面进行了规范,使得软件模块间实现调用、通信的标准。所以,COM不是接口,也不是对象,它是一种标准。符合COM标准的对象就是COM对象,其实COM对象无非是实现了很多接口的对象而已。COM对象必须实现IUnknown接口,这个接口是管理COM对象生命周期的。当COM对象不使用的时候,这个接口定义的方法负责释放内存。一个COM对象可以没有任何别的接口,但是必须要有这个接口,它也是默认实现了接口。QI,即所谓的查询接口。由于COM中有很多接口,不同的接口管理着COM的不同类型的方法,因此从一个接口可以使用的方法转到另一个接口可以使用的方法的过程称为QI,这个过程是由Idispatch接口管理的。每个组件都有一个独一无二的标识,即广泛唯一标识(GUIDs),它代表了COM的身份。一个COM对象可以有多个接口,一个接口可以被多个COM对象实现。