组件对象模型的目的是程序重构。以往的应用程序在调用一个功能模块的过程或引用一个对象时,需要把过程或对象的代码或代码指针(库方式)包含在程序中,运行时将过程或对象的代码装入内存运行。一旦模块或对象库修改,应用程序只能重新编译链接,重新包含代码和调整指针,否则应用程序不能正常运行。在软件生命周期中,每一个变更都有要承受“花费巨大代价”的风险。
COM技术的引入打破了这种局面。应用程序被分割成多个独立的单元,这些独立的单元被编译成规范的可执行的二进制代码,这就是组件对象。组件对象向使用者(COM客户)提供接口(interface)来描述自己和提供服务,COM客户通过接口向COM请求服务。接口是基于对象的一组语义相关的功能,是一些属性、方法和事件的集合,是COM客户与组件对象交互的惟一途径。只要接口保持兼容性,组件升级、改进后,无需对组件的客户程序做任何工作,COM客户程序照样可以运行。
COM在本质上仍然是客户机/服务器模式,COM服务器实际上是组件对象的容器。COM客户一般应独立于COM服务器。当一个客户请求某个COM对象的服务时,客户需要传递一个类的标志符(CLSID),请求Windows去查找该组件对象的地址,并把接口的指针传递给客户,Windows将从注册表中查找COM服务器的位置,并定位一个合适的COM对象。











