チェックから MICR 文字列を抽出するための c# コードを書いています。
私のスキャナーは、MICR リーダーをサポートする Cannon DR-850M です。
独自のスキャン プログラムで MICR 文字列を読み取ることができます。しかし、TWAINを使って自作する必要があります。
TWAIN ドライバーを使用してプログラム内の画像をスキャンできます。しかし、MICR 文字列を取得する方法が見つかりませんでした。
TWAINでスキャナーのMICRリーダーにアクセスする機能はありますか?それとも何か?
MICR データは「Extended Image Info」にあることがわかりました。回答ありがとうございます。
そして、もう少し問題が発生しました。
これが私のコードです。
// 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 文字が表示されます。しかし、私自身は奇妙な値を返します。
助けてもらえますか?