我正在编写一些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获得了这些值。
但我不知道什么样的价值 exinf.Info.Item 是
在示例应用程序中,它显示正确的MICR字符。但我自己的回报很奇怪。
我可以得到一些帮助吗?
答案 0 :(得分:1)
我只是错过了使用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;
}
答案 1 :(得分:0)
您可以使用TWAIN示例应用程序连接到您的Cannon扫描仪,找到MICR的自定义功能并使用该功能访问MICR功能。
This article可能会有所帮助。