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 中的调用方法的更多相关文章

  1. iOS中--NSArray调用方法详解 (李洪强)

    下面的例子以     NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"to ...

  2. Java中对象调用方法的顺序

    Java虚拟机会预先为加载到内存中的每个类维护一个方法表(Method Table),其中列出了所有类中所有方法的签名. 现在有2个类A和B,其中,B是A的子类,和一个B类型的对象x,当调用x.f(a ...

  3. [安卓][转]internal(com.android.internal)和hidden(@hide)APIs简介及在应用程序中的调用方法

    转自:http://www.cnblogs.com/xirihanlin/archive/2011/06/05/2073118.html [引言]:我在做android softap的时候看到andr ...

  4. java加载外部文件数据到代码中:外部数据文件放到jar包中,调用方法getResourceAsStream

    任务要将数据文件geo.txt加载进行.因为是别人写的总体项目,不能乱动位置.只能将geo.txt打包到jar中某目录.比如,放到.class文件下怎么加载:http://riddickbryant. ...

  5. HTML中JavaScript调用方法

    我在写web页面的时候,经常用js实现某些功能,我用的方法有两种: 1.点击调用JavaScript: <button onclick="loadXMLDoc()">b ...

  6. ABP在领域事件中异步调用方法抛异常

    在领域事件中调用UserRegistrationManager.RegisterAsync抛异常 Call UserRegistrationManager.RegisterAsync() throw ...

  7. C#中dll调用方法

    我不创造方法,只做方法的搬运工. https://www.cnblogs.com/Asuphy/p/4206623.html

  8. C#获取当前堆栈的各调用方法列表

    在使用.NET编写的代码在debug时很容易进行排查和定位问题,一旦项目上线并出现问题的话那么只能依靠系统日志来进行问题排查和定位,但当项目复杂时,即各种方法间相互调用将导致要获取具体的出错方法或调用 ...

  9. MVC中部分视图调用方法总结

    部分视图不走  controller @Html.Partial(“_Menu”);  //这种是不走Controller的,直接在加载_Menu的视图 @Html.Partial(“_Menu”, ...

随机推荐

  1. angular js 上传插件 ng-file-upload 使用时注意事项

    项目框架为angular js,需要用到文件上传,百度之后先选择了angular-file-upload,githuab上API文档很全,想要具体了解,可以仔细研究一下.在这里简单回顾一下自己使用的插 ...

  2. scrapy爬虫系列之二--翻页爬取及日志的基本用法

    功能点:如何翻页爬取信息,如何发送请求,日志的简单实用 爬取网站:腾讯社会招聘网 完整代码:https://files.cnblogs.com/files/bookwed/tencent.zip 主要 ...

  3. Python开发【Django】:时间处理

    时间格式化 做博客后台时,需要经常对数据库里面的时间格式(2017-02-17 02:10:44.308638)进行处理,格式化成自己想要的时间(列如年月日),下面就来记录下如何对时间进行处理 1.时 ...

  4. 【Linux】通过top语句可以查看压力测试的实时服务器状态。(可以通过百度Linux top查看相关内容)

    Linux实时查看服务器状态的两个语句 1.显示基本服务器监控状态语句如下:linux top 在这里输入 主要先看服务器负载高不高,高了后能否降下来,再看网络,io,数据库状态. 是有一个工具可以监 ...

  5. mac 安装homobrew 报错解决

    按照官网(https://brew.sh/index_zh-cn.html)给的命令:     /usr/bin/ruby -e "$(curl -fsSL https://raw.gith ...

  6. c primer plus(五版)编程练习-第七章编程练习

    1.编写一个程序.该程序读取输入直到遇到#字符,然后报告读取的空格数目.读取的换行符数目以及读取的所有其他字符数目. #include<stdio.h> #include<ctype ...

  7. CentOS7.0安装Nginx 1.10.0

    首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++.gcc.openssl-devel.pcre-devel和zlib-devel ...

  8. capistranorb

    远程服务器自动部署工具 https://capistranorb.com/

  9. AVAudioFoundation(3):音视频编辑

    本文转自:AVAudioFoundation(3):音视频编辑 | www.samirchen.com 本文主要内容来自 AVFoundation Programming Guide. 音视频编辑 上 ...

  10. remount issue on android 7.0

    http://blog.chinaunix.net/uid-23141914-id-5754416.html 最近在新版本的android 7.0上,发现filesystem的remount老是报“  ...