TWAIN-v2.4-说明文档翻译(2)技术概览
技术概览 Technical Overview
TWAIN架构(TWAIN Architecture)
数据交互的实现在TWAIN中由三类软件元素共同工作完成:应用程序(the application),数据源管理器(the Source Manager),以及数据源(the Source)。
这些元素使用TWAIN的协议架构来进行通讯。TWAIN架构由四层组成:
应用(Application)
协议(Protocol)
采集(Acquisition)
设备(Device)
TWAIN软件元素占据了如下图所示的各层。后续的各节中介绍了每一层。
应用层(Application)
用户的软件应用执行将会在这层中。
TWAIN为应用程序开发者关注用户如何访问使用TWAIN的功能以及如何选择指定的数据源描述了用户接口指引。
TWAIN不关注应用程序是如何实现的。TWAIN不会对任何应用可能会使用的应用间通讯模式造成影响。
协议层(Protocol)
协议是TWAIN所使用的用以描述的“语言”和语法。它实现了详细准确的指令和用以数据交换的通讯要求。
协议层包含:
应用软件的部分模块,该模块提供用于应用程序和TWAIN之间交互的接口。
由TWAIN所提供的TWAIN数据源管理器。
包含数据源设备用以接受来自数据源管理器以及回复的数据和返回码(Return Code)。
由TWAIN所提供的TWAIN数据源管理器。
数据源设备包含的软件模块,该模块用以接受来自数据源管理器以及回复的数据和返回码(Return Code)。
有关协议层的更多细节内容将会在“TWAIN元素间通讯(Communication Between the Elements of TWAIN)”中进行讨论。
采集层(Acquisition)
数据采集设备或许是物理的(像是扫描仪或是数字高拍仪)或是逻辑的(像是一个图像数据库)。编写用以控制采集物的被称为数据源(Sources),主要位于此层中。
数据源为应用传输数据。它使用与应用商议好的格式和传输机制(进行传输)。
数据源总会提供内建的用户界面,来控制将数据源写入驱动器的设备。如果想的话,应用程序可以为了获取数据重写这个用户界面来提供它自己的用户界面。
设备层(Device)
该层是传统的底层设备驱动模块。它们将特定于设备的命令转换为特定于驱动程序随附的特定设备的硬件命令和操作。使用TWAIN的应用不在需要发布设备驱动,因为它们已经是数据源的一部分了。
TWAIN完全不关心设备层。数据源向应用隐藏了设备层。数据源提供了从TWAIN操作以及与数据源用户界面的交互到设备驱动程序的等效命令的转换,这些命令使得设备按照预期运行。
注意:协议层是最彻底和最严格的定义,以允许应用程序和源之间进行精确的通信。本文档的内容将集中在协议和采集层。
TWAIN 用户界面(TWAIN User Interface)
当一个应用使用TWAIN来获取数据的时候,获取的处理过程可能会在如下的三个部分被应用的用户所看到:
应用程序(The Application)
用户需要选择他们想要来获取数据的设备。他们也需要在已经完成数据传输后获得通知。为了实现这一场景,TWAIN强烈推荐应用程序开发者添加两个选项到他们的文件菜单:
选择设备源(Select Source)。选择设备。
获取(Acquire)。开始进行传输。
数据源管理器(The Source Manager)
当用户选择选择数据源(Select Source)
选项的时候,应用程序向数据源管理器请求展示选择数据源的对话框。这个对话框列出所有可以使用的设备以及允许用户选择其中的一个。如果愿意,应用程序也可以编写自己版本的用户界面来做这件事。
数据源(The Source)
每一个遵循TWAIN规范的数据源会其特定的设备提供一个用户界面。当应用程序的用户选择了获取(Acquire)
选项的时候,数据源的用户界面可能会显示。如果愿意,应用程序也可以编写它自己版本的用户界面。
TWAIN元素间通讯(Communication Between the Elements of TWAIN)
在TWAIN元素间通讯可以通过两个入口点(entry point)来实现。他们被称作DSM_Entry()
和DS_Entry()
。DSM意思是Data Source Manager(数据源管理器),DS意思是Data Source(数据源)。
应用(The Application)
应用的目标是从数据源处获取数据。然而,应用无法与数据源进行直接的联系。所有对于数据的请求,,功能信息,错误信息等都必须要通过数据源管理器来进行处理。
TWAIN定义了大约140种操作。应用发送这些操作请求到数据源管理器以实现传输动作。应用为每一次的指定数据源管理器或是数据源来作为每一次操作请求的终端。
应用程序与数据源管理器进行通讯只会使用数据源管理器的入口,DSM_Entry()
函数。
DSM_Entry()
函数的参数包含:
一个标识结构体,提供了关于调用该方法的应用程序的信息。
请求的目标对象(数据源管理器或是数据源)
一个描述了请求操作的三元组。三元组包括:
- 操作的数据组(Data Group,DG_)
- 操作的数据参数类型(Data Argument Type,DAT_)
- 操作的消息(Message,MSG_)
(后续的使用操作三元组的一节将会描述更多的信息)
允许数据传输的指针字段
函数的调用会返回一个值(返回码,the Return Code)来展示本次操作成功与否。
TW_UINT16 TW_CALLINGSTYLE DSM_Entry
(
pTW_IDENTITY pOrigin, // source of message
pTW_IDENTITY pDest, // destination of message
TW_UINT32 DG, // data group ID: DG_xxxx
TW_UINT16 DAT, // data argument type: DAT_xxxx
TW_UINT16 MSG, // message ID: MSG_xxxx
TW_MEMREF pData // pointer to data
);
注意:数据类型定义将会在第8章,“数据类型和数据结构(Data Types and Data Structures”种讲解,同时也会在从TWAIN Working Group站点[http://www.twain.org]下载的TWAIN.H头文件中找得到对应的定义。
数据源管理器(The Source Manager)
数据源管理器为应用程序和数据源之间提供了通讯通道,支持了用户进行数据源的选择,以及为了通过应用程序的访问加载数据源。从应用程序到数据源的通讯以DSM_Entry()
作为入口点。
如果DSM_Entry调用中的目标是数据源管理器。
数据源管理器将会自己处理这个操作。
如果DSM_Entry调用中的目标是数据源。
数据源管理器会传输信息参数列表,移除目标参数,并且调用适合的数据源。为了联络到数据源,数据源管理器调用数据源的
DS_Entry()
函数。TWAIN要求所有的数据源都必须要由这个入口点。
在C语言风格下,DS_Entry
函数调用如下所示:
TW_UINT16 TW_CALLINGSTYLE DSM_Entry
(
pTW_IDENTITY pOrigin, // source of message
TW_UINT32 DG, // data group ID: DG_xxxx
TW_UINT16 DAT, // data argument type: DAT_xxxx
TW_UINT16 MSG, // message ID: MSG_xxxx
TW_MEMREF pData // pointer to data
);
TWAIN-v2.4-说明文档翻译(2)技术概览的更多相关文章
- BizTalk 开发系列(三十九) BizTalk Server 2009技术概览
BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与20 ...
- Windows Phone 8.1 开发技术概览 (Universal APP)
前一阵真的比较懒 WP8.1 已经出来这么长时间了现在才更新BLOG让大家久等了,今天我先为大家介绍下 WP 8.1的开发框架,什么是微软所推崇的 Universal APP,以及我们要开发 Univ ...
- 【转】Intel RealSense(实感技术)概览
Intel RealSense(实感技术)概览 1 Reply 版权声明:本文系本站作者自己翻译整理,欢迎转载,但转载请以超链接形式注明文章来源(planckscale.info).作者信息和本声明, ...
- Java SE技术概览 - Jave SE Platform at a Glance
从学习到工作,使用Java有几年时间,一直没有好好端详一下她的“内涵”.无意中看到一个关于Java SE的概览图,发现Java中提供的API还挺系统全面,把她放到博客中,相信对于想系统了解Java技术 ...
- 转:Linux网络IO并行化技术概览
转:http://codinginet.com/articles/view/201605-linux_net_parallel?simple=1&from=timeline&isapp ...
- 前端可视化建模技术概览,包括:GoJS
我推荐使用的: 库 网址 备注 GoJS https://gojs.net/latest/samples/flowchart.html 推荐使用 相关文章: 前端可视化建模技术概览:http://le ...
- Spring Cloud(一):服务治理技术概览【Finchley 版】
Spring Cloud(一):服务治理技术概览[Finchley 版] 发表于 2018-04-14 | 更新于 2018-05-07 | Spring Cloud Netflix 是 Spr ...
- Spring Cloud微服务技术概览
Spring Cloud 是一系列框架的有序集合.它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路器.数据监控等,都 ...
- Android埋点技术概览
注:本文同步发布于微信公众号:stringwu的互联网杂谈Android无埋点技术概览 本文是Android无埋点系列的开篇---埋点技术概览 1 背景 埋点是数据产品经理(分析师)基于业务需求,对用 ...
随机推荐
- 我对数据库事务的理解(MYSQL中)
-- 设置数据库事务为手动的提交SET @@AUTOCOMMIT = 0;-- 查看是否被修改SELECT @@autocommit;-- 查看当前的编码格式SELECT @@character_se ...
- 记一次 .NET 某流媒体独角兽 API 句柄泄漏分析
一:背景 1. 讲故事 上上周有位朋友找到我,说他的程序CPU和句柄都在不断的增长,无回头趋势,查了好些天也没什么进展,特加wx寻求帮助,截图如下: 看的出来这位朋友也是非常郁闷,出问题还出两个,气人 ...
- 利用元数据提高 SQLFlow 血缘分析结果准确率
利用元数据提高 SQLFlow 血缘分析结果准确率 一.SQLFlow--数据治理专家的一把利器 数据血缘属于数据治理中的一个概念,是在数据溯源的过程中找到相关数据之间的联系,它是一个逻辑概念.数据治 ...
- python 逆序按行读取文件
How to read a file in reverse order? import os def readlines_reverse(filename): with open(filename) ...
- js基本数据类型之间的转换
常见五大基本数据类型 1.number 2.string 3.boolean 4.undefined 5.null 一.转换为string ①调用toString() 方法 因为null和undefi ...
- Sentry-CLI 使用详解(2021 Sentry v21.8.x)
内容源于:https://docs.sentry.io/platforms/javascript/guides/vue/ 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创 ...
- Python图像分割之区域增长法
原文链接:https://blog.csdn.net/sgzqc/article/details/119682864 一.简介 区域增长法是一种已受到计算机视觉界十分关注的图像分割方法.它是以区域为处 ...
- error : Hooks can only be called inside of the body of a function component. 依赖包和主包加载多个react 引发冲突问题
1. 结论: 在依赖包和主包的node-modules中,同时install包含react , react-dom 或者react-redux时,跑测试或者启动的时候,显示如下error.当然出现这个 ...
- junit5 yaml和json 数据驱动
使用yaml 数据驱动测试 新建用例数据类,用于动态修改测试数据 对应yaml文件,第一层结构为列表 第二层结构为具体序列化class对象 测试成功 public class TestYaml { @ ...
- 模拟BS服务器
一.模拟BS服务器分析 二.BS模拟服务器代码实现 图片都是单独请求,后台单独线程,这边是通过构造方法传入的Runable接口的实现类匿名对象创建线程: 创建本地输入流读取到网络输出流传过来的信息再放 ...