VC开发基于Twain的扫描ActiveX控件
摘要:
在Web程序开发过程中,需要客户端通过网页调用控制扫描仪。为了解决不同设备的兼容性问题,本文介绍了Twain的基本原理和工作过程,并且以VC6.0为开发工具,开发了具有图像扫描和数据网页提交功能的ActiveX控件,满足Windows平台下IE的应用。
关键词:Twain,ActiveX控件,VC6.0
Abstract:
In the process of Web program developing,clients need to call to control the scanner via the web. In order to solve the compatibility problem of different devices,This paper introduces the basic principles and working process of Twain,and for the development of tools to VC6.0,developed a Web page with image scanning and data submitted enabled ActiveX controls,and fulfilled the applications with IE on the Windows platform.
Keywords:Twain,ActiveX Controls,VC6.0
一、引言
在开发Web程序的过程中,需要在客户端进行扫描图片并完成图片数据上传的功能。由于客户端是通过Windows系统的IE浏览器来访问,决定使用微软推出的ActiveX技术。通过网页内嵌入JavaScript,调用已经在本地计算机注册的ActiveX控件的接口函数,利用控件函数来控制外设扫描仪并且完成向服务器的数据上传数据。ActiveX控件既是一个自动化对象,也是一个标准的COM对象,还是一个可重用的软件组件,使用它可以很快地在网址、台式应用程序、以及开发工具中加入特殊功能。VC6.0是一个功能强大的可视化软件开发工具,它提供了最新的ActiveX开发工具—ActiveX模板库(ATL),并集成开发环境(IDE)和Microsoft基础类库(MFC),所以使用VC6.0开发ActiveX控件是非常可靠和方便的[1]。
二、Twain技术和操作流程
Twain工作组是一个非盈利的国际组织。它旨在提供一个统一的标准接口,通过该接口就可以实现应用程序与图像输入设备间的通讯。其实该标准目前已经成为了应用程序与图像输入设备间通讯的事实标准[2]。
1.Twain文件组成和结构
如果要使用Twain接口,就必须保证4个二进制文件被成功地安装在本地计算机上。这4个文件分别是:TW AIN_32.DLL,32位应用程序的支持文件;TW AIN.DLL,16位应用程序的支持文件;TWUNK
ER_32.EXE,实现32位应用程序与32位数据源进行通讯;TWUNKER_16.EXE,实现32位应用程序与16位数据源进行通讯。
Twain依靠三个组件协同完成与图像设备的通讯和数据传输工作,这三个组件分别是应用软件、源管理软件、图片源管理软件如图1所示。
应用软件源管理软件图片源
图1 Twain实现的3大部分模块
应用程序组件是指上层应用程序,也就是你要开发的软件程序。源管理软件是由TW AIN
提供的一个源管理器,包含在Twain开发工具包中。它不仅可以驱动本地计算机已经安装了的图像设备,
还可以根据需要去加载设备。同时它负责协商和管理应用软件和数据源之间的交互通讯,是管理底层图像源和顶层应用软件之间的交互数据和数据传递。图片源是完成控制硬件的驱动,获取图片的一个模块。它通常由不同的厂家按照Twain协议进行开发设计,一般会包含在设备驱动中。
2.Twain的接口函数和操作流程
Twain在处理函数是通过封装好的层之间来进行通讯的。Twain体系架构分为4层如图2:用户层,指的是应用程序以及界面显示;协议层,把用户的请求通过接口转译成Twain 代码;请求层,向下请求内容,可以是硬件也可以是数据库;硬件层,数据获取途径,也可指设备。
图2 Twain体系架构
Twain内部定义了相应消息的格式,这种操作方式就是三参数方法,即每个操作函数带三个参数来表示。通过三个参数的不同,操作函数执行的内容就不同,Twain操作就不一样。每个三参数操作都是唯一的,不会有重复,它们代表一个固定的操作行为。这三个参数类型分别是Data Group for the Operation(DG_),Data Argument Type for the Operation(DA T_),Message for the Operation(MSG_)。
Twain所有的操作都是通过DSM_Entry()、DS_Entry()[3]函数来实现的,它的定义如下:TW_UINT16 FAR PASCAL DSM_Entry
(
pTW_IDENTITY pOrigin, 指向操作发起者的指针
pTW_IDENTITY pDest, 指向目标对象的指针
TW_UINT32 DG, DG参数: DG_
TW_UINT16 DAT, DA T参数: DAT_
TW_UINT16 MSG, MSG参数: MSG_
TW_MEMREF pData 指向返回数据块的指针
);
TW_UINT16 FAR PASCAL DS_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
);
其中参数DG,DAT,MSG就是三参数方法中的三参数。
源管理状态源状态
图3 Twain的操作流程
Twain操作的一般流程如图3,分为源管理状态和源状态,详细给出了程序的操作步骤。这里注意两点:①在调用DSM_Entry()入口函数之前,必须要加载TWAIN_32.DLL文件,从而获得DSM_Entry()函数的指针。②程序中必须引进Twain.件。
三、VC开发ActiveX控件流程
1.建立MFC ActiveXControl工程
打开VC6.0工具,选择文件->新建->工程,选择MFC ActiveX ControlWizard[4],工程名为ActiveImage如图4。
图4 建立ActiveX控件工程
建立好工程后,在项目工程所在的磁盘文件夹添加Twain.件。在文件stdafx.h的顶部引进Twain.h,如下所示:
#include "Twain.h"
2.初始化函数和获取图片函数
ActiveX控件主要是通过网页中的JavaScript来调用接口函数,根据要完成扫描图片和上传数据两个功能,所以接口也定义了两个:
ActiveImage.odl文件中声明:
[id(1)] BSTR GetImage();
[id(2)]void InitParams(BSTR strServerName, BSTR strObjectName, BSTR strPort); ActiveImageCtl.cpp文件中函数定义:
浏览器的activex控件
void CActiveImageCtrl::InitParams(LPCTSTR strServerName, LPCTSTR strObjectName, LPCTSTR strPort)
{

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。