2006-05-23 今日もまたまたTWAIN。_ ややこしいTWAIN(その3)。なんだかアプリケーションの内部構造がかなり混沌としてきた。結局、16/48bitでの画像インポートは無事できるようになったし、DAT_IMAGEMEMXFERもDAT_IMAGENATIVEXFERも正しくハンドリングできている。耐久テスト(スキャナに対して繰り返し1024回連続スキャンを4セット)も合格。1バイトのメモリリークも検出されずでなかなかロバストではあるのであるが、中身がいまいち納得しにくい構造になってしまった。 しかしながら、現状の(アプリケーションがDataSourceを直接ロードするという)構造では、これ以上よい実装がいまのところ思いつかないのも事実。 仮に、このTWAIN DataSourceのIF部だけを別モジュールにしたとしたところで、やはりこのモジュール内が混沌とすることは避けられないわけで、どこかで誰かがやらねばならないわけである。 ということで、可能な限り、コード内、クラス間の見通しを確保しながら、注意深く実装することで勘弁することとしよう。 でもね、私なりに、あの複雑な仕組みを相当綺麗に実装出来たとは思う。 もし、DAT_IMAGENATIVEXFERだけでよいのであれば、アプリ側からは以下のコードでTWAINから画像を取得することが可能だ。 unsigned char *nativeImageP; char showUI; int errorCode; CTwainImage theTwain(m_hWnd /* or NULL */);普通のスキャンはまぁこれだけでいけるんで、楽ちんではあるが、この方法は theTwain.EnableDS() 内でメッセージ取得しながらスキャン終わるまでずっとポーリングしつづける。 これがいやな場合に備えて、外部からメッセージ処理関数を呼ぶような仕組みも設けてあり、今回はDAT_IMAGEMEMXFERが必須であることからも後者の仕組みを使っているのであるが、そうすると、もう少し複雑になってしまうがまぁそのくらいのことは、止む無しってところだろうな。 もっと読みたい奇特なかたは、↓の読みたい月をクリックしてね。 |
最新ツッコミ |