TWain 在 Qt4 中的调用方法
1、开发环境
Windows7_sp1_x64 Qt4.7.4 + mingw32 twain_32.dll (1.7.1.3)
2、常用缩写
DSM: Data Source Manager 数据源管理器
DS: Data Source 数据源
DSM_Entry: DSM调用入口
TW_UINT16 FAR PASCAL DSM_Entry(
pTW_IDENTITY pOrigin, // Source of message
pTW_IDENTITY pDest, // Destination of message
TW_UINT32 DG, // Data group ID: DG_xxxx; DG_CONTROL,DG_IMAGE,DG_AUDIO
TW_UINT16 DAT, // Data argument type: DAT_xxxx; DAT_IDENTITY ...
TW_UINT16 MSG, // Message ID: MSG_xxxx; MSG_GET,MSG_SET ...
TW_MEMREF pData // Pointer to data
);
3、调用实现
3.0 加载 TWAIN_32.DLL,并获取 DSM_Entry
HINSTANCE m_hTwainDLL = LoadLibrary(L"TWAIN_32.DLL"); DSMENTRYPROC m_pDSMProc = (DSMENTRYPROC)GetProcAddress(m_hTwainDLL, "DSM_Entry");
3.1 打开 DSM
MSG_PROCESSEVENT
HWND hWnd = this->WinId();
TW_IDENTITY m_AppId;
BOOL m_bDSMOpen = DSM_Entry(&m_AppId,NULL,DG_CONTROL,DAT_PARENT,MSG_OPENDSM,(TW_MEMREF)&hWnd);
3.2 选择 DS
TW_IDENTITY m_Source;
BOOL m_bDSSelect = DSM_Entry(&m_AppId,NULL,DG_CONTROL,DAT_IDENTITY,MSG_USERSELECT,&m_Source);
BOOL m_bDSSelect = DSM_Entry(&m_AppId,NULL,DG_CONTROL,DAT_IDENTITY,MSG_GETDEFAULT,&m_Source);
3.3 打开 DS
BOOL m_bDSOpen = DSM_Entry(&m_AppId,NULL,DG_CONTROL,DAT_IDENTITY,MSG_OPENDS,(TW_MEMREF)&m_Source);
3.4 设置参数
MSG_SET
3.5 显示扫描界面
MSG_ENABLEDS
3.6 获取图像
MSG_XFERREADY
DAT_SETUPFILEXFER
DAT_IMAGEFILEXFER
3.7 关闭扫描界面
MSG_CLOSEDSREQ
MSG_CLOSEDSOK
MSG_DISABLEDS
3.8 关闭 DS
MSG_CLOSEDS
3.9 关闭 DSM
MSG_CLOSEDSM
TWain 在 Qt4 中的调用方法的更多相关文章
- iOS中--NSArray调用方法详解 (李洪强)
下面的例子以 NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"to ...
- Java中对象调用方法的顺序
Java虚拟机会预先为加载到内存中的每个类维护一个方法表(Method Table),其中列出了所有类中所有方法的签名. 现在有2个类A和B,其中,B是A的子类,和一个B类型的对象x,当调用x.f(a ...
- [安卓][转]internal(com.android.internal)和hidden(@hide)APIs简介及在应用程序中的调用方法
转自:http://www.cnblogs.com/xirihanlin/archive/2011/06/05/2073118.html [引言]:我在做android softap的时候看到andr ...
- java加载外部文件数据到代码中:外部数据文件放到jar包中,调用方法getResourceAsStream
任务要将数据文件geo.txt加载进行.因为是别人写的总体项目,不能乱动位置.只能将geo.txt打包到jar中某目录.比如,放到.class文件下怎么加载:http://riddickbryant. ...
- HTML中JavaScript调用方法
我在写web页面的时候,经常用js实现某些功能,我用的方法有两种: 1.点击调用JavaScript: <button onclick="loadXMLDoc()">b ...
- ABP在领域事件中异步调用方法抛异常
在领域事件中调用UserRegistrationManager.RegisterAsync抛异常 Call UserRegistrationManager.RegisterAsync() throw ...
- C#中dll调用方法
我不创造方法,只做方法的搬运工. https://www.cnblogs.com/Asuphy/p/4206623.html
- C#获取当前堆栈的各调用方法列表
在使用.NET编写的代码在debug时很容易进行排查和定位问题,一旦项目上线并出现问题的话那么只能依靠系统日志来进行问题排查和定位,但当项目复杂时,即各种方法间相互调用将导致要获取具体的出错方法或调用 ...
- MVC中部分视图调用方法总结
部分视图不走 controller @Html.Partial(“_Menu”); //这种是不走Controller的,直接在加载_Menu的视图 @Html.Partial(“_Menu”, ...
随机推荐
- vue - 准备知识
一.知识 http://www.cnblogs.com/majj/https://www.cnblogs.com/majj/category/1216624.html 阮一峰 es6http://es ...
- django如何防止csrf(跨站请求伪造)
什么是CSRF 下面这张图片说明了CSRF的攻击原理: Django中如何防范CSRF Django使用专门的中间件(CsrfMiddleware)来进行CSRF防护.具体的原理如下: 1.它修改当前 ...
- python拼接字符串
python拼接字符串一般有以下几种方法: 1.直接通过(+)操作符拼接 s = 'Hello' + ' ' + 'World' + '!' print(s) 输出结果:Hello World! 使用 ...
- Openstack(九)部署nova服务(控制节点)
9.1nova服务介绍 nova是openstack最早的组件之一,nova分为控制节点和计算节点,计算节点通过nova computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,nov ...
- PAT 1075 PAT Judge[比较]
1075 PAT Judge (25 分) The ranklist of PAT is generated from the status list, which shows the scores ...
- android ReactNative之Cannot find entry file index.android.js in any of the roots
android ReactNative之Cannot find entry file index.android.js in any of the roots 2018年04月02日 14:53:12 ...
- CentOS下 Nginx1.13.5 + PHP7.1.10 + MySQL5.7.19 源码编译安装
一.安装Nginx ①安装依赖扩展 # yum -y install wget openssl* gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng l ...
- Ubuntu16.04 国内更新源
在修改source.list之前要先备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 替换内容到source.list中 阿里云源: ...
- Django-ORM查询api
models.py示例 class Book(models.Model): nid=models.AutoField(primary_key=True) title=models.CharField( ...
- (译)综合指南:通过Ubuntu 16.04上从Source构建来安装支持GPU的Caffe2
(译)综合指南:通过Ubuntu 16.04上从Source构建来安装支持GPU的Caffe2 译者注: 原文来自:https://tech.amikelive.com/node-706/compre ...