繁体   English   中英

如何使用TWAIN驱动程序从扫描仪获取MICR字符串

[英]How can I get MICR string from scanner by using TWAIN driver

我正在编写一些C#代码以从检查中提取MICR字符串。

我的扫描仪是Cannon DR-850M,它支持MICR阅读器。

它可以在自己的扫描程序上读取MICR字符串。 但是我需要使用TWAIN自己制作。

我可以使用TWAIN驱动程序扫描程序中的图像。 但是,我找不到如何获取MICR字符串。

TWAIN是否具有访问扫描仪的MICR阅读器的功能? 还是其他?


我发现MICR数据位于“扩展图像信息”中。 谢谢回答。

而且我还有更多问题。

这是我的代码。

// Twain DLL Wrapper
[StructLayout(LayoutKind.Sequential, Pack = 2)]
internal class TwInfo
{                                   // TW_INFO
    public short InfoID;
    public short ItemType;
    public short NumItems;
    public short CondCode;
    public int Item;
}

[StructLayout(LayoutKind.Sequential, Pack = 2)]
internal class TwExtImageInfo
{                                   // TW_EXTIMAGEINFO
    public int NumInfos;
    [MarshalAs(UnmanagedType.Struct, SizeConst = 1)]
    public TwInfo Info;
}

//Application
public void GetExtendedImageInfo()
    {
        TwRC rc;
        TwExtImageInfo exinf = new TwExtImageInfo();

        exinf.NumInfos = 1;
        exinf.Info = new TwInfo();
        exinf.Info.InfoID = (short)TwEI.BARCODETEXT;

        rc = DSexfer(appid, srcds, TwDG.Image, TwDAT.ExtImageInfo, TwMSG.Get, exinf);

        // Here's What I want to know.
        IntPtr itemPtr = new IntPtr(exinf.Info.Item);  
        string str = Marshal.PtrToStringAnsi(itemPtr); // It returns weird value.
    }

// Here's result
exinf.Info.CondCode : 0 (short)
exinf.Info.InfoID   : 4610 (short)
exinf.Info.Item : 36962876 (int)  // what's that?
exinf.Info.ItemType : 12 (short)
exinf.Info.NumItems : 4 (short)
exinf.NumInfos      : 1 (int)

我从TWAIN获得了这些值。

is 但是我不知道是什么样的价值

在示例应用程序中,它显示正确的MICR字符。 但是我自己返回了奇怪的价值。

我可以帮忙吗?


解决了

我只是错过了使用GlobalLock作为指针。

这是代码。

public string GetExtendedImageInfo()
    {
        TwRC rc;
        TwExtImageInfo exinf = new TwExtImageInfo();

        exinf.NumInfos = 1;
        exinf.Info = new TwInfo();
        exinf.Info.InfoID = (short)TwEI.BARCODETEXT;

        rc = DSexfer(appid, srcds, TwDG.Image, TwDAT.ExtImageInfo, TwMSG.Get, exinf);

        StringBuilder strItem = new StringBuilder(255);
        IntPtr itemPtr = new IntPtr(exinf.Info.Item);
        IntPtr dataPtr = GlobalLock(itemPtr);
        string str = Marshal.PtrToStringAnsi(dataPtr);
        GlobalUnlock(itemPtr);
        GlobalFree(itemPtr);

        return str;
    }

您可以使用TWAIN示例应用程序连接到Cannon扫描仪,找到MICR的自定义功能,然后使用该功能访问MICR功能。

本文可能会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM