正在学习COM原理与应用,怕自己忘记,所以做了以下笔记
一、COM接口简介
1. 二进制特性:接口规范不建立在任何编程语言的基础上,而是规定了二进制一级的标准。任何语言只要有足够的数据表达能力,就可以对接口进行描述,从而可以用于与组件程序有关的应用开发。
2.接口不变性:接口是组件客户程序和组件对象之间的桥梁,接口如果经常发生变化,则客户程序和组件程序也要跟着变化,这对于应用系统的开发非常不利,也不符合组件化程序的设计思想。
3.继承性(扩展性):COM接口具有不变性,但不变性不意味着不再发展,随着应用系统和组件程序的不断发展,接口也需要发展。类似于C++中类的继承性,接口也可以继承发展,但接口继承和类继承不同。首先,类继承不仅是说明继承,也是实现继承,既派生类可以继承基类的实现,而接口继承只是说明继承。其次,类继承允许多重继承。一个派生类可以有多个基类,但接口继承只允许单继承,不允许多重继承。
根据COM规范,所有的接口必须由IUnknown派生,可以是直接派生,也可以是间接派生。
所有接口都必须继承lUnknown继承的原因在于IUnknown提供了两个非常重要的特性:生存周期控制(引用计数)和接口查询。客户只能通过接口与COM对象进行通信,虽然客户程序不用管对象内部的实现细节,但它要控制对象的存在与否。另一方面,如果一个COM实现了多个接口,在初始时刻,客户程序不太可能得到该对象的所有接口指针
4.多态性(运行过程的多态性):多态是面向对象系统的重要特性,COM对象也具有多态性,其多态性通过COM接口体现。多态性使得客户程序可以用统一的方法处理不同的对象,甚至是不同类型的对象,只要他们实现了同样的接口。
正是由于COM的多态性,我们才可以用COM规范建立插件系统,应用程序可以用统一的方法处理每一个插件。
COM组件分类:进程内组件(DLL) + 进程外组件(EXE)
进程内组件:进程内