winscardでICカード読み込みプログラム: SCardGetStatusChangeの無限待ちをキャンセルするにはどうするは?SCardCancel

ICカードリーダーを利用したICカード読み込みプログラム作成時の失敗解決メモです。

Windowsに添付されているwinscard.dllを利用して実現できます。

1.SCardEstablishContext・・・ICカードーリーダー利用開始2.SCardListReaders・・・現在接続されているカードリーダの名前を取得する
3.SCardGetStatusChange・・・カードリーダーの状態変化を検出する(カードがかざされた等)
4.SCardConnect・・・カードに接続
5.SCardTransmit・・・カードID取得などのコマンド送信
6.SCardDisconnect・・カードと切断
7.SCardReleaseContext・・・ICカードーリーダー利用終了

これらのメソッドを利用して、作成していきました。

その中で、ICカードが、かざされるまで「ICカードをかざして下さい」というメッセージ画面を表示するようにしました。その画面では、3のSCardGetStatusChangeを非同期で動かして、ICカードをかざされるのを待つようにしました。パラメータでINFINITEを指定することで、無限にずっと待つことができます。

ただ、INFINITEで無限待ちの時にで、読み込み待ちをキャンセルしたい場合は、どうすればよいのでしょう?「ICカードをかざして下さい」の画面には、もちろんキャンセルボタンをつけていて、キャンセルボタンが押された時です。

最初は、SCardReleaseContextを実行して、例外を発生させて、処理を中断させていたのですが、うまくいっていたように思えたのですが、やはり、強引なやり方だったようで、キャンセル時に、たまに意味不明なエラーがでる時がある・・・

よく調べたら、SCardCancelというのがありました。

そりゃそうですよね・・こちらを使用することで、すっきり解決できました。

閑話休題

android無料アプリを作っています。

メモ帳に簡単なパスワード機能がほしい、という方、こちらをぜひ

メモ帳を守る果物の木

Tree that protect Notepad

メモ帳を果物で隠してくれます~。

興味がありましたら、

ストアへ

こちらもよろしくお願いします。

カップラーメンの3分ひまつぶしに!

タイマー &四つ葉のクローバー探し

Timer&Find four-leaf clover

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です