2006
07-08

Q:什么是com?

A:com是指组件对象模型,是关于如何创建组件和如何通过组件建构应用程序的一个规范。

Q:什么是“客户”?

A: 对于一个应用程序或者组件,如果他使用了其他组件,那么我们称这个应用程序或者组件为“客户”。“客户”通过其他接口与组件连接。对于用户来说,一个组件就是一个接口集。用户只能通过接口才能和组件打交道。

Q:什么是接口?

A:对于com来说,接口是一个包含函数指针数组的内存结构。每一个数组元素包含的是一个由组件所实现的函数的地址。一个com组件可以提供多个接口(称之为“接口集”),而每个接口则包含了一系列函数。每一个接口都有一个唯一的接口标示符(IID)。

Q:定义接口和实现接口分开的动机是什么?
A:是把对象内部的工作细节(相对于客户而言)都隐藏起来,这样在客户代码不需要重新编译的条件下,实现接口类的内部的数据成员数目和顺序都可以改变。

Q:COM接口层次上的“多层继承”和实现层次上的“多层继承”的概况?
A:COM 是禁止多层接口继承的,一个原因是多层继承会使接口在二进制层次上无法保持“编译器无关性”。而在实现层次上,多层继承是存在的。

Q:类型库(type library)的用途?
A:类型库(符号化的idl)是一个二进制文件,他保存了能够识别COM接口的其他语言所映射的接口定义。从而使其他语言能够使用这些组件的接口。

Q:IUnknown接口中QueryInterface, AddRef, Release函数的作用是?

A:QueryInterface用来决定组件是否支持某个特定的接口。AddRef和Release用来控制接口的生命周期。若某个接口的vtbl的前3个函数不是这三个函数,那么这个接口不是一个com接口。

Q:“得知两个接口指针是不是指向同一对象的唯一方法是查询这两个接口的IUknown,然后比较结果?”  这句话不明白  p。49 《COM 技术内幕》

A:这个IUknown应该是指指向组件的指针。在QueryInterface中确保它一定指向组建对象地址的开始处。

Q:什么是CLSID?

A: 除了用GUID 来表示接口以外,还可以用GUID来标示唯一的组件。叫做CLSID。

Q:在com中经常看到某个对象同时使用-〉和.操作符同时使用的情况,why?

A:c++中存在对操作符号的重载,所以可以重载-〉号,但是好像’.'号是不能重载的(有待考察) !

A:什么是代理、残根DLL?

Q:一个代理就是同另一个组件行为相同的组件,代理必须是DLL形式的。因为它必须访问客户进程的地址空间以便对传给接口函数的参数进行调整。残根DLL对返回给客户的参数进行调整以及对客户传递来的参数进行反调整。

A:什么是双重接口、调度接口?

Q:IDispatch::Invoke函数所实现的函数集被称作一个调度接口。双重接口也是一种调度接口,它使得可以通过invoke调用的函数也能够通过vtbl访问。


留下一个回复