Twain翻译第一章二章_第1页
Twain翻译第一章二章_第2页
Twain翻译第一章二章_第3页
Twain翻译第一章二章_第4页
Twain翻译第一章二章_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一章需要的一致性通过引入扫描仪、数码相机、和其他图像采集设备,userseagerly发现的值将图像纳入他们的文件和其他工作。然而,支持这个栅格数据的显示和操作放在一个高成本onapplication开发者。他们需要创建用户界面和构建在设备控制设备为各种各样的形象。一旦他们的应用程序准备支持给定的设备,他们面对令人沮丧的现实,设备继续beupgraded新的功能和特性。应用程序开发人员发现themselvescontinually修改他们的产品保持电流。开发人员的图像采集设备和软件应用程序承认需要一个标准的图像设备和应用程序之间的通信。一个标准将有利于两组的用户以及他们的产品。将允许设备供应

2、商的产品被更多的应用程序和应用程序供应商couldaccess访问数据从没有关心哪种类型的设备,这些设备或特定设备,它提供.TWAIN开发,因为这需要一致性和简化。吐温的元素吐温定义了一个标准的软件协议和API(应用程序编程接口)forcommunication软件应用程序和图像采集设备之间数据的来源。吐温的三要素是:应用软件,应用程序必须使用吐温被修改。源代码管理软件,该软件管理应用和源之间的交互。这段代码提供的吐温开发者Toolkitand应该与每个吐温应用程序和源代码免费运送。源软件,这个软件控制图像采集设备,writtenby设备开发人员遵守吐温规范。传统devicedrivers现在

3、包含在源代码软件,不需要byapplications运来。使用吐温的好处Benefits of Using TWAIN为应用程序开发人员允许您应用程序的用户提供一个简单的方法将图像从任何兼容的光栅设备无需离开您的应用程序。节省时间和金钱。如果你目前为扫描仪提供底层设备驱动程序,等等,你不再需要编写、支持或船这些驱动程序。TWAIN-compliant形象采集设备将提供源码软件模块,消除对你的需要创建和船舶设备驱动程序。允许应用程序访问数据从任何TWAIN-compliant外围简单形象通过修改应用程序代码一旦使用吐温高层应用程序编程接口。不需要定制的产品。吐温形象外围设备图像、应用程序、数据源

4、、经理、传真、应用程序、文字处理器、应用程序、数码相机、数据源、扫描仪、数据源、图像数据库、数据源、生产商、图像数据;的消费者、图像数据、HW依赖I / O层、(SCSI、并行、串行等)。源管理器、软件、数据源、软件、应用程序、软件吐温接口吐温2.3规范1 - 3可以包括桌面扫描仪,扫描仪,数码相机、框架的吸引力,形象吗数据库,或任何其他光栅图像来源符合吐温协议和API。允许你确定一个图像采集设备的特性和功能提供的。您的应用程序可以限制源只提供这些功能兼容应用程序的需求和能力。消除了需要为应用程序提供一个用户界面来控制图像收购的过程。有一个每TWAINcompliant附带软件用户界面模块源设

5、备来处理这一过程。当然,您可以提供自己的用户接口,用于收购,如果需要的话For the Source Developer源开发人员增加你的产品的使用和支持。更多的应用将成为形象消费者的结果易于实现和广度的设备集成吐温提供。允许您为您的设备提供一个专有的用户界面。这允许您呈现最新功能,用户无需等待应用程序将他们纳入接口。降低您的实现成本,因此节省了资金。而不是创建和支持各种版本的设备控制软件集成各种应用程序中,您将创建一个TWAIN-compliant来源。For the End User对于终端用户给用户一个简单的方法将图像文件。他们可以访问图像在更少的步骤,因为他们从不需要离开您的应用程序。

6、注意:吐温是支持所有版本的Microsoft Windows和苹果的Mac OS X。吐温2。x和更高的支持Linux和64位操作系统。信息支持吐温16位操作系统和老版本的苹果的Macintosh操作系统不再是当前的吐温规范中描述。请参考规范的版本1.9支持旧的操作系统。Creation of TWAIN创建吐温吐温是由一小群软件和硬件公司为了应对需要提出了成像行业规范。工作小组的目标是提供一个开放的、多平台解决互连光栅输入设备的需求应用程序软件。最初的工作组是由代表5人公司:阿尔杜斯,Caere,柯达腋生的,惠普,罗技。其他三个公司,Adobe Howtek,软件架构师也作出了重要贡献。在1

7、991年1月,马克·吐温的设计开始。审查原始吐温的开发人员工具包从1991年4月,发生在1991年1月,。最初的工具箱是由吐温联盟。联盟包括大约300个人代表200个公司继续影响和指导吐温的未来方向。当前版本的吐温是吐温工作小组的成员包括写的Adobe,柯达腋生的,Inc .,富士通计算机产品美国惠普公司,JFL外围Solutions Inc .,理光公司、施乐公司、蜥蜴科技公司。1998年5月,微软宣布一项协议,吐温工作组提供的包含吐温数据源管理器在Microsoft Windows 98和微软Windows NT 5.0。在吐温的创建,以下架构目标是坚持:易于采用TWAINcom

8、pliant允许应用程序供应商让他们的应用程序合理的开发和测试工作。的基本特征吐温应该实现只是通过适度调整应用程序。采取利用一套更完整的功能更多的发展工作应该预期。可扩展性体系结构必须包括灵活地接受多个窗口环境中生成各种主机平台(Mac OS X,微软Windows、LinuxKDE和Gnome等),促进源设备之间交换的各种数据类型和目标应用程序。目前,只有光栅图像数据类型的支持建议未来的扩展包括文本、传真、矢量图形等等。集成-吐温实现的关键元素“属于”操作系统。微软和吐温工作组之间的协议表明这一点集成到操作系统开始。吐温必须实现鼓励向后兼容性(扩展)和平滑迁移到操作系统。一个最小化使用特定于

9、平台的实现机制增强的长寿和被领养。简单应用< - >源互连-识别和直接来源选择机制将提供。通过一个应用程序将推动这一机制简单的API。这种机制也将建立数据和控制之间的联系应用程序和源代码。它将支持能力和沟通和配置应用程序和源之间的谈判。封装人机界面,需要一个设备本机的用户界面源。应用程序可以选择覆盖这个本地用户界面,同时仍然使用源控制物理设备。第二章技术概况TWAIN Specification吐温架构数据传输是通过三个软件元素一起工作在吐温:源管理器应用程序,源代码。这些元素使用吐温通信的体系结构。吐温架构包括四层:应用程序协议收购设备吐温软件元素层次如下图所示。每一层中描述接下

10、来的小节。应用程序用户的软件应用程序执行在这一层。吐温描述用户界面指南关于用户如何应用程序开发人员吐温功能的访问以及如何选择一个特定的源。吐温并不关心应用程序是如何实现的。吐温对任何没有影响应用程序可能使用的应用程序之间的通信方案。协议协议是马克·吐温所使用的“语言”口语和语法。它实现了精确的指令和通信所需的数据传输。协议层包括:应用软件的一部分,它提供了应用程序和之间的界面吐温吐温源经理马克·吐温所提供的软件中包含的源设备接收指令从源经理和传输数据和返回代码协议层的内容将更详细地讨论在“之间的通信吐温“2 - 5页的元素。收购采集设备可能是物理(如扫描仪或数码相机)或逻辑

11、(比如一个映像数据库)。软件元素写入控制收购被称为源和驻留主要是在这一层。为应用程序源传输数据。它使用的格式和传输机制达成一致经源和应用程序。源总是提供了一个内置的用户界面控制设备(s)来源写入驱动器。应用程序可以覆盖这个和现在自己的用户界面收购,如果需要的话。设备这是传统的底层设备驱动程序的位置。他们将特定于设备的命令到特定于特定设备的硬件指令和操作司机被写入伴随。使用吐温的应用程序不再需要船设备驱动程序,因为它们来源的一部分。吐温不关心设备层。源隐藏的设备层应用程序。源提供了翻译从吐温操作和交互源的用户界面等效命令导致的设备驱动程序设备的行为。注意:协议层是最彻底和严格定义为允许精确应用程

12、序和资源之间的通信。本文档中的信息集中在协议和采集层。吐温的用户界面当一个应用程序使用吐温获取数据,采集过程可能是可见的应用程序的用户在以下三个方面:应用程序用户需要选择他们想要的设备获取数据。他们也需要信号,当他们准备传输数据。允许,吐温强烈建议应用程序开发人员两个选项添加到文件菜单:选择源-选择设备收购开始转移过程源管理器当用户选择选择源选项时,源的应用程序请求管理器对话框显示其选择来源。这列出了所有可用的设备和允许用户突出并选择一个设备。如果需要,应用程序可以编写自己的版本的用户界面。源每个TWAIN-compliant源提供了一个特定于特定设备的用户界面。当应用程序用户选择购买选项,源

13、的用户界面可以显示出来。如果需要,该接口的应用程序可以编写自己的版本,。吐温的元素之间的沟通吐温的元素之间的通信通过两个入口点是可能的。他们是叫DSM_Entry()和DS_Entry()。DSM意味着数据源管理器和DS意味着数据源。图2 - 3入口点元素之间的交流应用程序应用程序的目的是获得来自一个源的数据。然而,应用程序不能接触直接来源。所有请求数据、功能信息、错误信息等通过源代码管理器处理。大约140操作是由马克·吐温。应用程序将它们发送给源经理的传播。应用程序指定的元素,经理或来源,来源每个请求操作的最终目的地。应用程序通信源经理通过源代码管理器的唯一入口点,DSM_Entr

14、y()函数。DSM_Entry函数的参数列表包含:一个标识符结构提供关于应用程序的信息,起源函数调用这个请求的目的地(源经理或源)三联体描述所请求的操作。三联体指定:数据组的操作(DG_)数据参数类型的操作(DAT_)消息操作(MSG_)第二章2 - 6吐温2.3规范(这些更多的章节描述了三胞胎坐落在稍后使用操作章)。一个指针字段允许传输数据函数调用返回值(返回代码)表示的成功或失败操作。TW_UINT16 TW_CALLINGSTYLE DSM_Entry(pTW_IDENTITY pOrigin,/ /消息的来源pTW_IDENTITY pd,/ /目的地的消息TW_UINT32 DG,/

15、 /数据组ID:DG_xxxxTW_UINT16 DAT,/ /数据参数类型:DAT_xxxx/ /消息ID:MSG_xxxx TW_UINT16味精TW_MEMREF pData / /指向数据的指针);注:数据类型定义都包含在第八章,数据类型和数据结构,并在文件名为吐温。H可下载的吐温工作组网络网站)。源管理器源管理器提供了应用程序和源之间的通信路径,支持用户的选择一个源,并加载访问应用程序的源代码。从应用程序源通信经理抵达DSM_Entry()切入点。如果目的地DSM_Entry调用源经理源管理器流程操作本身。如果目的地在DSM_Entry调用源源管

16、理器将参数列表的信息,消除了目的地参数并调用适当的来源。达到源代码,源代码管理器调用源的DS_Entry()函数。吐温需要每个源入口点。用C编写的代码形式,DS_Entry函数调用是这样的:TW_UINT16 TW_CALLINGSTYLE DSM_Entry(pTW_IDENTITY pOrigin,/ /消息的来源TW_UINT32 DG,/ /数据组ID:DG_xxxxTW_UINT16 DAT,/ /数据参数类型:DAT_xxxx/ /消息ID:MSG_xxxx TW_UINT16味精TW_MEMREF pData / /指向数据的指针);此外,资源管理器可以启动三个操作,没有起源的应

17、用程序。这些操作三胞胎的存在只是为了经理源通信和来源源管理器执行时显示其选择源对话框。的操作是用来识别可用的来源和打开或关闭资源。源管理器的实现支持系统之间的不同:在Windows上源Manager是一个动态链接库(TWAINDSM.DLL)。源之间的并发会话管理器可以管理应用程序和许多来源。在麦金托什源经理是一个Mach-O框架(TWAIN.framework)。在Linux上源Manager是一个共享库(/ usr /地方/ lib / libtwaindsm.so)。源管理器可以管理应用程序之间的同步会话和许多来源。源源接收操作的应用程序,或直接通过源代码管理器从源经理。它处理请求并返回

18、适当的返回代码(代码与TWRC_前缀)指示操作的结果到源代码管理器。如果发起人操作的应用程序,则传回返回代码应用程序的返回值DSM_Entry()函数调用。如果操作是成功,一个条件代码(代码与TWCC_前缀)包含更具体设置的信息来源。尽管条件代码设置,它不是自动传递回来。应用程序必须调用一个操作来询问情况的内容代码。源的实现是一样的实现源经理:在Windows上源是一个动态链接库(DLL)。ds扩展。在麦金托什源被实现为一个包(最好是Mach-O)。ds扩展。在Linux上源是一个共享库(所以)。ds扩展。通信流从源应用程序大多数的操作请求是由应用程序和流动源经理和源。源,通过源代码管理器,可

19、以通过数据和返回代码。然而,有四次当源需要中断应用程序和要求一个动作发生。这些情况是:通知应用程序数据传输准备发生。所需的时间源准备数据传输会有所不同。而不是应用程序等准备工作完成,只是通知当一切都准备好了。的MSG_XFERREADY注意用于这一目的。要求源的用户界面被禁用。这种通知应发送的源应用程序,当用户点击“关闭”按钮的用户来源接口。MSG_CLOSEDSREQ通知用于这一目的。通知应用程序OK按钮被按下,接受用户的更改了。这只是与DG_CONTROL /如果源打开使用DAT_USERINTERFACE / MSG_ENABLEDSUIONLY。用于MSG_CLOSEDSOK通知这一目

20、的。设备事件发生。这个通知发送源应用程序时具体的事件发生,但只有在应用程序指令之前给源传递这样的事件。MSG_DEVICEEVENT通知用于这一目的。这些通知给应用程序的事件(或消息)循环。使用的过程在第十二章,这些通知覆盖更全面”的操作系统依赖关系”讨论应用程序的事件循环。识别吐温2.0元素测试TW_IDENTITY是不够的。ProtocolMajor字段可以确定一个应用程序,一个数据源管理器或一个来源是吐温2.0兼容。检查TW_IDENTITY。SupportedGroups字段为应用程序或源,寻找后:DF_APP2,表明应用程序2.0兼容DF_DSM2,表明数据源管理器2.0兼容DF_D

21、S2,表明数据源是2.0兼容应用程序所有吐温DF_APP2在2.0兼容应用程序必须报告TW_IDENTITY。SupportedGroups字段。所有吐温2.0兼容应用程序都必须测试的DF_DSM2国旗TW_IDENTITY。SupportedGroups领域,后调用DG_CONTROL / DAT_PARENT /MSG_OPENDSM。如果没有找到这个标志,然后按照传统行为1。x应用程序,在吐温使用内存管理函数的详细规范。如果国旗被发现,那么应用程序必须调用DG_CONTROL / DAT_ENTRYPOINT /MSG_GET状态3,在执行任何其他操作之前,获得指针指向的内存管理功能。来

22、源吐温2.0兼容所有必须报告DF_DS2在他们的来源TW_IDENTITY。SupportedGroups字段。所有吐温2.0兼容来源必须准备好接收DG_CONTROL /DAT_ENTRYPOINT / MSG_SET调用状态3,之前DG_CONTROL / DAT_IDENTITY /MSG_OPENDS。如果这个操作是不叫,然后1. x的遗产的行为源,使用内存管理函数在吐温的规范,详细定位显示数据源管理器。吐温2.3规范2 - 9如果操作被称为源必须使用指针指向的内存管理功能,必须使用访问DSM_Entry提供的入口点。使用DAT_CALLBACK消息从源应用程序应用程序吐温在Linux

23、上运行的应用程序或苹果Macintosh OS X必须使用DG_CONTROL /DAT_CALLBACK / MSG_REGISTER_CALLBACK登记接收异步通知MSG_XFERREADY等事件。吐温来源使用旧版本的数据源管理器(未检测到DF_DSM2国旗)必须使用遗留的行为。请参阅第12章,“操作系统依赖关系”信息。请注意,吐温建议的应用程序从一个回调返回尽快函数。事件像MSG_XFERREADY应该启动图像转移在同一线程做MSG_ENABLEDS这样回调可以立即返回。来源吐温源检测DF_DSM2标记内的存在TW_IDENTITY。SupportedGroups必须使用DG_CONT

24、ROL / DAT_NULL与适当的消息返回MSG_XFERREADY之类的事件。吐温源使用旧版本的数据源管理器(未检测到DF_DSM2国旗)使用传统的行为。请参阅第12章,“操作系统依赖关系”数据源管理器的安装吐温应该安装最新版本的应用程序和资源数据源管理器。请检查吐温网站,看看你的操作系统或发行版表示,如果不是,请考虑提交吐温工作组。指第十二章,“操作系统依赖关系”。在吐温2.0和更高版本的内存管理吐温需要的应用程序和资源管理彼此的记忆。主要的问题是保证协议API的使用。吐温2.0引入了四个新函数,得到了从源经理通过DAT_ENTRYPOINT。TW_

25、HANDLE TW_CALLINGSTYLE DSM_MemAllocate(TW_UINT32)空白TW_CALLINGSTYLE DSM_MemFree(TW_HANDLE)TW_MEMREF TW_CALLINGSTYLE DSM_MemLock(TW_HANDLE)空白TW_CALLINGSTYLE DSM_MemUnlock(TW_HANDLE)源经理负责确保所有组件都使用相同的内存管理的API。第二章2 - 10吐温2.3规范如果DAT_ENTRYPOINT不是从源经理然后获得应用程序和资源必须使用传统电话。指第十二章,“操作系统依赖关系”。也看到DSMInterface。cpp样

26、本来源:http:/twain-使用操作三胞胎DSM_Entry()和DS_Entry()函数是用来沟通操作。一个操作管理器调用一个操作应用程序或来源。通常,但并非总是如此涉及到使用数据或修改数据所显示的最后一个参数(pData)函数调用。请求行为发生在其中的一个方法:应用程序源经理DSM_Entry pd参数集零应用程序源(通过源管理器)DSM_Entry与pd参数集指向一个有效的结构,确定了源源经理DS_Entry来源所需的行动是由一个操作三联体作为三个参数的传递函数调用。每个三联体独特,没有歧义,指定一个特定的行动。没有操作指定超过一个单一的三联体。这三个参数构成三重数据组、数据参数类型

27、和消息ID,每个参数传递特定的信息。数据组(DG_xxxx)操作分为大类别的数据组标识符。以下是吐温的当前定义数据组:控制(标识符是DG_CONTROL。):这些操作涉及的控制吐温会话。一个例子,DG_CONTROL用作数据组标识符操作打开源代码管理器。图像(标识符是DG_IMAGE。):这些操作处理图像数据。一个例子DG_IMAGE作为数据组是一个请求的操作传输的图像数据。音频(DG_AUDIO标识符):这些操作处理音频数据(支持一些数码相机)。一个例子,DG_AUDIO作为数据组是一个音频数据的转移操作请求。数据参数类型(DAT_xxxx)这个参数的三联体标识的数据类型被传递或操作。参数类

28、型可以引用一个数据结构或一个变量。有很多数据参数类型。DAT_IDENTITY就是一个例子。DAT_IDENTITY类型是用来识别一个吐温来源等因素。数据是通常通过或通过DSM_Entry pData参数和修改DSM_Entry。在这种情况下,pData参数指向一个数据结构的类型TW_IDENTITY。参数的数据类型始于DAT_xxxx和相关的数据结构始于TW_xxxx和副本的第二部分的名字。这种模式是之后一直对大多数数据参数类型及其数据结构。任何异常指出在参考页第七章,第八章,“操作三胞胎数据类型和数据结构”。消息ID(MSG_xxxx)这个参数标识应用程序或源经理的行动的愿望拍摄的。有很多

29、不同的消息MSG_GET或MSG_SET等。他们都开始MSG_的前缀。操作的例子三胞胎三联体应用程序发送给源经理打开源经理模块:DG_CONTROL / DAT_PARENT / MSG_OPENDSM应用程序发送的三联体指示源代码管理器显示其选择源对话框,从而允许用户选择他们计划获得数据来源的是:DG_CONTROL / DAT_IDENTITY / MSG_USERSELECT三联体应用程序发送给从源传输数据到一个文件中是:DG_IMAGE / DAT_IMAGEFILEXFER / MSG_GET基于状态的协议应用程序、源代码管理器和源必须沟通管理收购数据。这是合乎逻辑的,这一过程必须发

30、生在一个特定的序列。例如,应用程序不能成功地请求前的从源传输数据来源管理器加载和准备沟通请求。确保正确执行序列,吐温协议定义中存在的七个州吐温会话。会话期间,应用程序连接到一个特定的来源通过源代码管理器。而应用程序连接到源管理器另一个独特的会话。在一个给定的点在一个会话,吐温经理和元素的来源源每占领一个特定的状态。转换到一个新的状态是由操作引起的请求的应用程序或来源。可以向前或向后的方向转变。大多数转换国家过渡。例如,一个操作移动源经理从1到状态2不是从1到状态3。(有两个过渡的情况可能发生。第三章中讨论,“应用程序实现”。)当查看基于状态的协议,它有助于记住:州1、2和3仅由资源管理器被占用

31、。源经理从不占用状态大于3。州4、5、6和7完全占据的来源。一个源从来没有少于4如果是打开状态。如果它是封闭的,它没有状态。如果一个应用程序使用多个来源,每个连接都是一个独立的会话,每个开源“驻留”在自己的国家不顾国家的其他来源是什么在。状态转换图看起来像这样:美国的描述以下部分描述。州1 -拉伸源经理驻留在状态1应用程序建立一个会话。此时,经理源代码已经安装在磁盘上但通常不是加载到内存中。唯一的情况下,源管理器可能已经加载并运行Windows,因为实现一个DLL(因此,同一来源的实例经理可以由多个应用程序共享)。如果这种情况存在,源经理将在状态2或3的应用程序加载它。状态2 -源管理器加载源

32、经理现在被加载到内存中。现在还没有开放。这时,源经理准备接受其他操作的三胞胎应用程序。3 -源码经理开放状态源管理器打开并准备管理资源。源经理现在准备提供资源的列表,打开来源,关闭来源。源管理器将留在状态3为剩余的会话,直到关闭。源管理器拒绝被关闭而应用程序有任何公开来源。4 -源开放状态源已经装载和打开资源管理器来响应一个操作从应用程序。它准备接收操作。源应该验证,足够的资源(如内存、设备可用,它运行等)存在。应用程序可以查询源的能力(即水平分辨率,支持彩色或黑白图像,自动文档送料器,等等)。应用程序还可以设置这些功能所需的设置。例如,它可能会限制一个源能提供彩色图像传输只有黑色和白色。注意

33、:询问能力可能发生在源州4、5、6、7。但是,一个应用程序可以设置一个功能只有在国家4除非特别许可谈判应用程序和源之间的关系。5 -源启用状态源已经被从应用程序通过一个操作启用源经理和准备user-enabled转移。如果应用程序允许源显示其用户界面,源将这样做当它进入状态5。国家6 -转移已经准备好了源准备转移一个或多个数据项(图像)应用程序。第二章2 - 14吐温2.3规范的的过渡状态5到6是由源通知应用程序转让已经准备好了。在初始转移之前,应用程序必须查询图像的信息(分辨率,图像大小,等等)。如果源支持音频,然后将图像之前,应用程序必须的所有音频片段转移相关的图片。有可能不止一个连续图像

34、传输。这个话题被在第四章,“高级应用程序实现”。国家7 -转移源图像转移到应用程序。所使用的传输机制是协商在国家4。转让将成功完成或提前终止。源发送适当的返回代码显示结果。源表示转让完成后,应用程序必须承认转移结束。其TW_IDENTITY吐温2.0兼容的应用程序测试。SupportedGroups DF_DSM2之后调用DG_CONTROL / DAT_PARENT MSG_OPENDSM调用DG_CONTROL如果发现问题/ DAT_ENTRYPOINT / MSG_GET。吐温2.0兼容源发送DG_CONTROL / DAT_ENTRYPOINT / MSG_SET;测试应用程序的TW_

35、IDENTITY。SupportedGroups DF_DSM2和DF_APP2。功能吐温的好处之一是它允许应用程序方便地与各种各样的收购设备。设备可以提供图片或音频数据。例如,有些设备文档自动喂食器。有些设备不限于一个图像但可以传递多个图像。一些设备支持彩色图像。有些设备提供各种各样的半色调模式。一些设备支持一系列决议,而其他人可能提供不同的选择。一些设备允许录音的音频数据与图像相关联。应用程序的开发人员需要注意的一个源的功能和可能影响功能源提供了应用程序的用户。要做到这一点,应用程序可以执行谈判能力。应用程序通常遵循这一过程:确定所选源支持一个特定的功能。询问的当前值的能力。同时,查询功能

36、的默认值和一组可用的值所支持的来源能力。要求源将当前值设置为应用程序的期望值。当前的值将被显示为当前选择源的用户界面。限制,如果需要,可用的源的值通常是提供的一个子集。例如,如果应用程序希望只有黑色和白色的数据,它可以限制源仅传输。如果限制影响源的用户界面,源应该修改接口,以反映这些变化。例如,它不可能灰色选项可用的,因为应用程序的限制。验证新值已经接受的来源。吐温能力分为三组:CAP_xxxx:功能的名字开始帽是可以适用于任何的功能一般来源。这些功能包括使用文档的自动喂食器,识别数据的创造者,等等。ICAP_xxxx:功能的名字开始ICAP功能,适用于图像设备。“我”代表形象。(当吐温扩展到

37、支持其他数据传输如文本或传真数据,会有tcap和FCAPs以类似的风格)。ACAP_xxxx:功能的名字开始ACAP是适用于功能支持音频的设备。“A”代表音频。功能的容器功能存在于许多品种,但都有一个默认值,当前值和可能如果选择其他值可以被支持。帮助支持的值进行分类清晰的结构,吐温为功能定义了四种类型的容器。名字的数据 结构的容器 类型的内容TW_ONEVALUE 一个值的当前和默认值重合。这种类型的可用的范围值能力就是单一值。例如,一个能力,表明存在一个文档给料机可能是这种类型的。TW_ARRAY数组的值来描述当前的逻辑项。可用的值可能是一个更大的数组值。例如,名称的列表,例如支持功能返回的

38、列表CAP_SUPPORTEDCAPS能力,会使用这种类型的容器中。TW_RANGE允许用户选择他们当前的许多功能值从一个范围均匀间隔的值。的能力可以指定最小值和最大值可接受的值和之间的增量步长值。例如,决议可能被支持从100年到600年,50步(100,150,200,、550、600)。TW_ENUMERATION这是最普遍的类型,因为它定义的列表可以选择值的当前值。的值不一致通过一系列和进步没有一个一致的价值观之间的步长。为例子,如果一个源的决议选项没有发生甚至步骤大小然后将(用于枚举150年,400年和600年)。一般来说,大部分功能可以有一个以上的这些容器适用于他们这取决于特定的来源

39、,实现功能。为每个数据结构这些容器是在第八章中定义,数据类型和数据结构。一个完整的表所有定义功能位于第十章,“功能”。必须的一些功能支持的应用程序和源代码。剩下的功能是可选的。谈判和容器类型的能力是非常重要的应用程序和数据源开发人员注意,容器类型由数据源查询在所有情况下,一个值。也允许容器类型的每个能力显然是在第十章中定义,“功能”,马克·吐温规范。这是唯一一次适合调用应用程序指定一个容器类型是在MSG_SET操作。那时,还必须考虑允许的应用程序容器和类型的特定功能。建议应用程序使用MSG_SET它收到的容器MSG_GET。容器和字符串值的能力唯一的容器,可以举办一个字符串如下:TW

40、_ENUMERATIONTW_ARRAYTW_ONEVALUE是不可能的或有用的TW_RANGE使用这种类型。事实上,没有情况能力被定义在第十章,“功能”,马克·吐温规范的一个地方TW_RANGE TW_STRxxxx类型的值是允许的。从版本1.7开始,只有以下功能接受字符串:CAP_AUTHOR、TW_ONEVALUE TW_STR128TW_ENUMERATION这是最普遍的类型,因为它定义的列表可以选择值的当前值。的值不一致通过一系列和进步没有一个一致的价值观之间的步长。为例子,如果一个源的决议选项没有发生甚至步骤大小然后将(用于枚举150年,400年和600年)。名字的数据结

41、构的容器类型的内容吐温2.3规范2-17CAP_CAPTION、TW_ONEVALUE TW_STR255CAP_TIMEDATE、TW_ONEVALUE TW_STR32ICAP_HALFTONES TW_ONEVALUE / TW_ENUMERATION / TW_ARRAY TW_STR32不同容器类型的定义可能会让人困惑。例如,的定义TW_ONEVALUE如下:/ * TWON_ONEVALUE。一个值的容器。* /typedef struct TW_UINT16 ItemType;TW_UINT32项目; TW_ONEVALUE,远* pTW_ONEVALUE;乍一看,它很容易尝试将

42、字符串到这个容器分配“项目”一个指针。这是不符合其他结构的实现规范,介绍了一系列问题管理的内存占用的字符串。(见TW_IDENTITY一致的吐温字符串使用)正确的和一致的方法的字符串在吐温容器是确保字符串是嵌在容器本身。定义一个新结构在开发人员的代码,或添加的大小被认为是在分配容器。下面的例子是为了证明可能使用吐温字符串的方法容器。这些例子是适合演示,需要细化真正的使用。示例1:TW_ONEVALUE结构为持有TW_STR32定义价值/ * TWON_ONEVALUESTR32。一个值控股TW_STR32的容器。* /typedef struct TW_UINT16 ItemType;TW_S

43、TR32项目; TW_ONEVALUESTR32,远* pTW_ONEVALUESTR32;注意:包装时注意两字节结构定义定制容器结构。这清楚地显示内存分配和字符串所在。的数据源不需要关心本地字符串是如何管理的,和应用不需要关心管理字符串内存或内容。示例2:TW_ONEVALUE结构分配和充满考虑持有TW_STR32价值(Windows)HGLOBAL AllocateAndFillOneValueStr32(const pTW_STR32 pInString)DWORD dwContainerSize = 0 l;第二章最近马克·吐温2.3规范HGLOBAL hContainer

44、=零;pTW_ONEVALUE pOneValue =零;pTW_STR32 pString =零;断言(pInString);dwContainerSize = sizeof(TW_ONEVALUE) + sizeof(TW_STR32);hContainer = GlobalAlloc( GPTR, dwContainerSize );if(hContainer)pOneValue = (pTW_ONEVALUE)GlobalLock(hContainer);if(pOneValue)pOneValue->ItemType = TWTY_STR32;pString = (pTW_ST

45、R32)&pOneValue->Item;memcpy(pString, pInString, sizeof(TW_STR32);GlobalUnlock(hContainer);pOneValue = NULL;pString = NULL;return hContainer;Example 3:TW_ENUMERATION structure allocated with consideration of holding TW_STR32 values (WindowsExample)HGLOBAL AllocateEnumerationStr32( TW_UINT32 unNumItems )DWORD dwContainerSize = 0l;HGLOBAL hContainer = NULL;pTW_ENUMERATION pEnum = NULL;/ Note: This calculation will yield a size approximately/ one pointer larger than that required for thi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论