1.
1:COM是一种二进制级别的组件通信标准。它告诉组件之间该如何通信、一个COM对象之间的不同接口如何查询等。
2:COM对象也是基于面向对象标准的。COM对象可以以DLL或者EXE文件形式存在,它包含着接口的具体实现。使用者可以通过接口来获取它内部的方法、属性。
2.
3:COM对象必须实现IUnknown接口,它负责管理COM对象生命周期并在运行时刻提供类型查询,当COM对象不使用的时候,是这个接口定义的方法负责释放内存。
4
4:QI,即所谓查询接口
l
由于一个COM对象有很多个接口,不同的接口管理着COM的不同类型的方法、属性,因此从一个接口可以使用的属性方法转到另一个接口可以使用的属性方法的过程称为QI。这个过程也是由IUnknown接口管理的。
IMap pMap ; IActiveView pActiveView ;
pMap = axMapControl1.Map; //获取控件中的地图
……
pActiveView = pMap as IActiveView; //QI
………
5:每个组件都有一个独一无二的标识GUID。接口的GUID称为IID,而组件类的GUID称为CLSID。CLSID还有一个文本别名,即所谓的ProgID,它是一个由工程名加组件类类名组成的字符串。
6:一个COM对象可以有多个接口,一个接口也可以被多个COM对象实现。
7.
7:接口分为两种,即内向接口和外向接口。
l内向接口是组织COM对象相关的方法和属性,COM对象必须实现所有的接口内容;
l外向接口是用于组织COM对象相关的事件。
8.
8:COM对象的接口一旦被公布,就不能再修改,但可以增加新接口,在ArcObjects中有很多以“2”、“3”结尾的接口,都是这样发展的产物。
9:COM组件必须被注册后才能使用。
l COM的缺陷:由于COM对象可以被重用,这样多个程序可能共用一个COM对象,如果这个COM组件升级了,就很可能出现其中某个程序无法使用新组件,导致程序不能运行的情况,这种情况被称为“DLL HELL”(DLL灾难)。
9.