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. hive引入jar包--HIVE.AUX.JARS.PATH和hive.aux.jars.path

    hive需要引入包时?该怎么引入? 一.hive-site.xml中的hive.aux.jars.path 此配置项对于hive server有效,但是是不会作用到hive shell.也就是说即使你 ...

  2. 什么是虚拟DOM?

    (摘抄自一篇文章,觉得这里写得非常不错,所以单独放出来,希望能对大家有帮助.)React为啥这么大?因为它实现了一个虚拟DOM(Virtual DOM).虚拟DOM是干什么的?这就要从浏览器本身讲起 ...

  3. jquery 重复导入问题

    $(...).bootstrapTable is not a function

  4. soapUI-DataSource

    1.1.1.1 概述 - 数据源   Option Description   Properties DataSource属性表   Toolbar DataSource工具栏   Configura ...

  5. JavaScript的基础语法

    对于Javascript的而言没有数据类型的全部都是通过var来定义创建的.比如: <!DOCTYPE html> <html> <head> <meta c ...

  6. 基于.net core webapi和mongodb的日志系统

    开发环境vs2017,.NET Core2.1, 数据写入到mongodb.思路就是1.提供接口写入日志,2.基于接口封装类库.3.引入类库使用 源码在最后 为什么要写它 很多开源项目像nlog.lo ...

  7. 2018 Multi-University Training Contest 8 Solution

    A - Character Encoding 题意:用m个$0-n-1$的数去构成k,求方案数 思路:当没有0-n-1这个条件是答案为C(k+m-1, m-1),减去有大于的关于n的情况,当有i个n时 ...

  8. 在Qt中如何编写插件,加载插件和卸载插件(转)

    Qt提供了一个类QPluginLoader来加载静态库和动态库,在Qt中,Qt把动态库和静态库都看成是一个插件,使用QPluginLoader来加载和卸载这些库.由于在开发项目的过程中,要开发一套插件 ...

  9. HTTP从入门到入土(1)——五层网络模型

    五层网络模型 简介 互联网的实现,依托于网络协议.网络协议又分为好几层,关于如何分层有过很多争论,比较受人认可的有五层模型.七层模型.四层模型.今天我们就来讲讲五层网络模型. 从名字就可以看出来,五层 ...

  10. bzoj1612 / P2419 [USACO08JAN]牛大赛Cow Contest(Floyd)

    P2419 [USACO08JAN]牛大赛Cow Contest Floyd不仅可以算最短路,还可以处理点之间的关系. 跑一遍Floyd,处理出每个点之间是否有直接或间接的关系. 如果某个点和其他$n ...