本文转载自程序员面试宝典第二版COM组件部分
1.COM是什么?它是一种接口么?
- Components Object Model: COM不是接口,也不是对象,它是一种标准
2.什么是COM对象
- 符合COM标准的就是COM对象,其实COM对象无非就是实现了很多接口的对象而已
3.COM对象中的Iunknown接口有什么作用?
- COM对象必须实现Iunknown接口,这个接口是负责COM对象的生命周期的。当COM对象不使用的时候,这个接口定义的方法负责释放内存,一个COM对象可以没有任何别的接口,但是必须要有这个接口,它是默认实现的接口
4.QI是什么
- QI是查询接口QueryInterface。由于COM对象有很多个接口,不同的接口管理着COM的不同类型的方法,因此从一个接口可以使用的方法转到另一个接口可以使用的方法的过程称为QI(这句话不太好理解),这个过程是由Idispatch接口管理的
5.GUIDS是什么
- GUIDS 每个组件都有一个独一无二的标识,这就是所谓的广泛唯一标识符。这个标识符就是COM组件的身份,它是一个128位的数字,由系统自由分配
6.一个COM对象是否可以有多个接口?
- 是,一个COM对象可以有多个接口,一个接口也完全可以被多个COM对象实现
7.COM组件最大的缺点是什么?
- COM组件很不错,但是他也有致命的缺陷,这个缺陷就是它本身。COM是可以被重用的,COM对象实现的过程也可以被修改升级,如果两个程序都使用同一个COM对象,而这个COM组件升级了的话,很可能会出现某个程序无法使用新组件的情况,这被称为“DLL HELL”,有时我们安装了新软件后很多别的软件就无法使用了,很大程度上就是因为这个“DLL HELL”
8.COM对象的接口分为几种?
- COM对象的接口分为两种:内置接口和外置接口,前一种定义的是COM对象的方法和属性,用implement实现,COM对象必须实现所有的接口内容,后一种定义的是COM对象的事件,用withEvent实现,这种接口在实现的是欧不必实现所有的内容