一般OLE概念

【勇芳软件工作室】汉化HomePreviousNext

OLE最有吸引力的一个方面是完全模块化。它的设计使得每个组件大部分都可以自己存在。例如,您可以向应用程序添加拖放支持,而无需添加就地激活,自动化或复合存储。

即使您的应用程序仅使用一小部分OLE,组件对象模型(COM)也可使其他应用程序知道应用程序的OLE功能。COM是OLE基础的基础,基础模型;所有OLE对象也是组件对象。

COM规定任何组件对象必须控制自己的使用寿命,并能够以严格定义的方式告知其他对象的功能。为了控制其使用寿命,组件对象保持引用计数。能力被分组成称为接口的逻辑集合;每个接口是支持一定能力所需的一组成员函数。组件对象必须使用的“严格定义的方式”本身就是一个接口,称为IUnknown.因为所有的OLE接口来自IUnknown,它们是组件对象。IUnknown具有三个成员函数:QueryInterfaceAddRef发布.

一个对象使用QueryInterface来告诉其他对象其功能。如果对象实现请求的接口,它将返回一个指向该接口的指针。如果没有实现它,它返回E_NOTIMPL错误值,表示对象不支持请求的接口。AddRef发布用于控制对象的使用寿命。当另一个对象持有指向对象的指针时,将调用一个对象的AddRef成员函数,并且在不再需要该指针时调用发布成员函数。如果对发布的调用导致对象的引用计数为零,则该对象可以安全地自行卸载。

COM提供了几个立即的好处:

*一个对象可以预先确定另一个对象是否支持某个特征。如果另一个对象不支持该函数,则调用对象可以做出相应的反应。

*对象不会在内存中保留更长时间(或更短),并且不依赖于用户启动或关闭它们。

OLE数据传输机制是拖放支持的关键要素。OLE中的数据传输允许对象对它们传输的数据非常具体。而不是简单地能够传输一个普通的老位图,一个对象现在可以传送一个打印机设备呈现的对象内容的位图,并存储在流中以由OLE释放。

为了实现这一点,OLE使用IDataObject接口和FORMATETCSTGMEDIUM结构。应用程序实现IDataObject完成OLE中的所有数据传输;它包括设置和检索对象的数据的成员函数,枚举可用的数据格式和接收数据更改通知。FORMATETCSTGMEDIUM提供有关正在传输的数据的具体细节,即目标设备,方面,存储介质和发布方法。

每个拖放操作涉及两个对象:源和目标。源对象包含要拖动的数据,目标对象接受拖动的数据。