OLE技术

OLE技术

<wbr></wbr>

译者注:(整体通讯架构:OLE客户端应用程序<</span>——> OLE客户端库<</span>——> OLE服务器库<</span>——> OLE服务器应用程序)

<wbr></wbr>

概要:

<wbr><span></span>OLE</wbr>是一种技术,可以用来创建复杂文档,这些复杂文档包含的信息来自不同的渠道(数据源)。例如,一个支持OLE的字处文档(例如word)能够支持嵌入的表格对象。与传统的“拷贝和

<wbr></wbr>

粘贴”方式不一样,“拷贝和粘贴”会改变粘贴信息的格式。但是嵌入的文档会保留所有原来的属性。如果用户打算编辑嵌入的数据,windows操作系统会激活原来的应用程序(例如excel

<wbr></wbr>

并(在excel中)载入这个嵌入的文档。

<wbr></wbr>这篇文档提供一个OLE库的概述;讨论虚拟方法表(VTBL virtual method table)的数据结构,虚拟方法表对每个OLE应用程序都是需要的;进一步我们再讨论OLE应用程序中如何使用windows剪贴板。

<wbr></wbr>

更多信息

OLECLI.DLL - OLE客户端库

<wbr><span></span>OLECLI.DLL</wbr>,在微软windows环境中,OLE客户端库提供服务用来简化OLE客户端应用程序的开发。在客户端应用程序和OLE客户端库之间进行双向通讯(译者注:就是相互发消息)。客户端

<wbr></wbr>

应用程序调用OLE客户端库中的函数来执行OLE任务,例如创建对象,渲染(译者注:一般就是指界面显示,特别是图形的显示方式),载入和保存对象。OLE客户端库通过应用程序注册的回调函数给应用程序发送状态信息。这个库在回调函数中发给客户应用程序的状态数据中包含了通知,例如通知对象发生了改变,被重命名,被保存或者被OLE服务器应用程序关系等。

<wbr></wbr>

OLESVR.DLL - OLE服务器库

<wbr><span></span>OLESVR.DLL</wbr>OLE服务器库为OLE服务器应用程序提供服务。在服务器应用程序和OLE服务器库之间进行双向通讯(译者注:就是相互发消息)。服务器应用程序调用服务器库中的函数来注册或者注销它自己。注册后服务器应用程序就可用了,注销后就它就不能再用了。它也会调用服务器库中的函数来保存或者重命名一个文档。服务器库通过一个回调函数的集合(这个集合包含了27个定义好的回调函数)来传递信息给服务器应用程序。每一个服务器应用程序的回调函数被服务器库调用来请求服务器执行指定的动作,或者通知服务器应用程序某个指定的时间发生了。这些回调函数通常也被称为调用方法。

<wbr></wbr>

Object Handlers对象句柄

Object Handlers译者注:通常就是一个标识符,或者说是一个id,用来唯一标识一个事务

<wbr></wbr>最终用户一般就关心两类OLE应用程序:客户端应用程序和服务器应用程序。然而,应用程序开发人员必须还要关心第三种类型的OLE模块,这种类型的OLE模块称作对象句柄。一个对象句柄就是一个动态链接库(DLL),在理解上可以把它当成是一个功能有限的服务器应用程序。对象句柄包含一些功能,这些功能就是服务器应用程序的对象需要支持的功能。举例来说,当客户端

<wbr></wbr>

应用程序调用了一个对象的方法(verb),这时能够处理这个调用的对象句柄被加载到内存(译者注:代码只有加载到内存才能执行),接下来对象句柄就处理这个调用。处理后调用后,对象句柄能够自动从内存卸载,这个卸载的过程不需要主服务器应用程序协助。对象句柄提供了一种高效管理对象的方式,因为比起一个(通常都比较大)的完整功能的服务器应用程序来说,

<wbr></wbr>

句柄都更小,也就能够更加高效地加载和卸载。对象句柄和完整功能的服务器应用程序一样,都是使用OLE服务器库来实现的。

<wbr></wbr>

使用VTBL

<wbr></wbr>就像上面讲的那样,从OLE客户端库到客户端应用程序,以及从OLE服务器库到服务器应用程序的通讯,都是通过应用程序定义的回调函数来实现的。在客户端或者服务器应用程序初始化期

<wbr></wbr>

间,它们使用一个指向VTBL数据结构的指针作为参数来调用合适的库(译者注:就是各调各的库)。这个库使用VTBL中的指针来调用应用程序的回调函数。

<wbr></wbr>

<wbr></wbr>举例来说,服务器应用程序提供给OLE服务器库的VTBL称作OLESERVERVTBL。服务器应用程序使用指向6个回调函数的指针来填充OLESERVERVTBL数据结构,这6个回调函数分别实现了Create(创建)、CreateFromTemplate(通过模版创建)、Edit(编辑)、Exit(退出)、Open(打开)、Release(释放)方法。一旦服务器应用程序传递这个初始的VTBL给服务器库以后,服务器库就可以调用这6个方法中的任何一个。从这里可以看到使用VTBL允许OLE库调用应用程序定义的函数,并且函数实现的方法与函数名字无关。(译者注:就是说OLE库可以不用关心你的函数名称,开发人员可以随便定义,只要符合模版定义的参数格式就行了。因为使用的指针是函数的地址,根本就不是通过函数名称来调用的

<wbr></wbr>

<wbr></wbr>对熟悉C++语言的程序员来讲,VTBL的概念类似于C++虚拟方法的概念。实际上,VTBL和虚拟方法是很相关的。VTBL允许OLE库指定客户端或者服务器应用程序必须实现的方法(method译者注:其实就是指函数),当然也允许针对每一个对象类型定义不同的方法实现(译者注:就是说同一个方法可以有不同的实现方法,比如说排序,可以是快排,也可以是冒泡。但是对外面都是一样的,就是实现了排序这个功能method)。

<wbr></wbr>

Inter-library Communicatio库间通讯

译者注:就是指客户端库和服务器端库这两个库之间怎么通讯

<wbr><span></span>OLE</wbr>库的最初版本在微软windows软件开发工具集(SDK)的3.1版本中开始提供,这个时候库之间的相互通讯采用的是(dynamic data exchange (DDE))动态数据交换消息协议。客户端和

<wbr></wbr>

服务器库使用WM_DDE_EXECUTE在彼此之间发送标准的OLE命令。在windows 3.1版本的SDK中,OLE库的实现没有使用(Dynamic Data Exchange Management Library (DDEML))动态数据交换管

<wbr></wbr>

理库来开发。原因是DDEMLOLE库是并行开发的。OLE库后续的版本可以使用DDEML或者其他进程间通讯机制。

<wbr><span></span>OLE</wbr>库使用的库间通讯协议隐藏在库里面了,它就不应该影响OLE客户端和服务器应用程序的设计。

<wbr></wbr>

The Shell Library - Shell

<wbr></wbr>需要OLE应用程序也使用第三方的库SHELL.DLLShell库提供API函数允许应用程序读取和修改windows注册表数据库。注册表包含了系统安装的OLE服务器的信息,以及他们支持的对象类型

<wbr></wbr>

和动作(verb)Shell库也对通过windows文件管理器来拖拽文件的操作提供支持。如果OLE客户端应用程序实现了拖拽功能,文件可以从文件管理器中拖出来,打开文档的客户端应用程序支持

<wbr></wbr>

嵌入这个文件,那么这个文件就可以放到这个文档中。(译者注:例如,word是客户端应用程序,word可以支持电子表格(excel)。如果打开了一个word文档,由于word文档支持电子表格,这时拖拽一个excel文件到word中,就可以把这个电子表格嵌入到word文档中。注意,这时候excel就是服务器

<wbr></wbr>

Placing an OLE Object on the Clipboard -OLE对象放入到剪贴板中

<wbr></wbr>表示格式用来指定如何显示一个对象(译者注:翻译比较拗口,就是说规定了显示方法,就决定了最后看到的对象是个什么样子)。当服务器应用程序在剪贴板中放入一个对象时,它指定

<wbr></wbr>

了对象的一个或者多个图形表现方式,这个表示格式可以包含元文件(metafile(CF_METAFILEPICT))格式,设备相关的位图(CF_BITMAP)格式,或者设备无关的位图(CF_DIB)格式。当用户在

<wbr></wbr>

客户端应用中粘贴对象到这个容器文档(译者注:比如一个打开的word文档)时,OLE库使用这些表示格式(译者注:就是上面说的那3)来显示对象。由于尺寸改变时,位图或者元文件格

<wbr></wbr>

式通常会发生改变,对象的效果(appearance)又依赖于表示格式,因此对象最终的显示效果也可能发生变化。嵌入对象保存在剪贴板上,可以是所有者链接(OwnerLink)格式、原生(Native)

<wbr></wbr>

译者注:就是没有改变,就是原来怎么样,保存到剪贴板中还是什么样)、或者是前面描述的三种格式(CF_METAFILEPICTCF_BITMAPCF_DIB)之一。每一种表示和预定义的windows格式中都

<wbr></wbr>

有一个名字常量的定义,这些常量定义在SDK包含的头文件WINDOWS.H中。每个OLE应用程序必须调用RegisterClipboardFormat函数来在windonws中注册OwnerLinkNative格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值