OLE技术
译者注:(整体通讯架构:OLE客户端应用程序 <</span>——> OLE客户端库 <</span>——> OLE服务器库 <</span>——> OLE服务器应用程序)
概要:
粘贴”方式不一样,“拷贝和粘贴”会改变粘贴信息的格式。但是嵌入的文档会保留所有原来的属性。如果用户打算编辑嵌入的数据,windows操作系统会激活原来的应用程序(例如excel)
并(在excel中)载入这个嵌入的文档。
更多信息
OLECLI.DLL - OLE客户端库
应用程序调用OLE客户端库中的函数来执行OLE任务,例如创建对象,渲染(译者注:一般就是指界面显示,特别是图形的显示方式),载入和保存对象。OLE客户端库通过应用程序注册的回调函数给应用程序发送状态信息。这个库在回调函数中发给客户应用程序的状态数据中包含了通知,例如通知对象发生了改变,被重命名,被保存或者被OLE服务器应用程序关系等。
OLESVR.DLL - OLE服务器库
Object Handlers对象句柄
(Object Handlers,译者注:通常就是一个标识符,或者说是一个id,用来唯一标识一个事务)
应用程序调用了一个对象的方法(verb),这时能够处理这个调用的对象句柄被加载到内存(译者注:代码只有加载到内存才能执行),接下来对象句柄就处理这个调用。处理后调用后,对象句柄能够自动从内存卸载,这个卸载的过程不需要主服务器应用程序协助。对象句柄提供了一种高效管理对象的方式,因为比起一个(通常都比较大)的完整功能的服务器应用程序来说,
句柄都更小,也就能够更加高效地加载和卸载。对象句柄和完整功能的服务器应用程序一样,都是使用OLE服务器库来实现的。
使用VTBL
间,它们使用一个指向VTBL数据结构的指针作为参数来调用合适的库(译者注:就是各调各的库)。这个库使用VTBL中的指针来调用应用程序的回调函数。
Inter-library Communicatio库间通讯
(译者注:就是指客户端库和服务器端库这两个库之间怎么通讯)
服务器库使用WM_DDE_EXECUTE在彼此之间发送标准的OLE命令。在windows 3.1版本的SDK中,OLE库的实现没有使用(Dynamic Data Exchange Management Library (DDEML))动态数据交换管
理库来开发。原因是DDEML和OLE库是并行开发的。OLE库后续的版本可以使用DDEML或者其他进程间通讯机制。
The Shell Library - Shell库
和动作(verb)。Shell库也对通过windows文件管理器来拖拽文件的操作提供支持。如果OLE客户端应用程序实现了拖拽功能,文件可以从文件管理器中拖出来,打开文档的客户端应用程序支持
嵌入这个文件,那么这个文件就可以放到这个文档中。(译者注:例如,word是客户端应用程序,word可以支持电子表格(excel)。如果打开了一个word文档,由于word文档支持电子表格,这时拖拽一个excel文件到word中,就可以把这个电子表格嵌入到word文档中。注意,这时候excel就是服务器)
Placing an OLE Object on the Clipboard - 把OLE对象放入到剪贴板中
了对象的一个或者多个图形表现方式,这个表示格式可以包含元文件(metafile(CF_METAFILEPICT))格式,设备相关的位图(CF_BITMAP)格式,或者设备无关的位图(CF_DIB)格式。当用户在
客户端应用中粘贴对象到这个容器文档(译者注:比如一个打开的word文档)时,OLE库使用这些表示格式(译者注:就是上面说的那3种)来显示对象。由于尺寸改变时,位图或者元文件格
式通常会发生改变,对象的效果(appearance)又依赖于表示格式,因此对象最终的显示效果也可能发生变化。嵌入对象保存在剪贴板上,可以是所有者链接(OwnerLink)格式、原生(Native)(
译者注:就是没有改变,就是原来怎么样,保存到剪贴板中还是什么样)、或者是前面描述的三种格式(CF_METAFILEPICT,CF_BITMAP,CF_DIB)之一。每一种表示和预定义的windows格式中都
有一个名字常量的定义,这些常量定义在SDK包含的头文件WINDOWS.H中。每个OLE应用程序必须调用RegisterClipboardFormat函数来在windonws中注册OwnerLink和Native格式。