トップ «前の日記(2006-05-22) 最新 次の日記(2006-05-24)» 編集

かにの泡ぶく


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 */);
nativeImageP = NULL; /* 念のために。別に不要。 */ theTwain.SelectSource(); /* 必要に応じて。 */ showUI = TRUE; nativeImageP = theTwain.EnableDS(showUI); if (nativeImageP) { /* 画像取得できた。 */ hogehoge(nativeImageP); myDisposePtr((void **)&nativeImageP); } else { errorCode = theTwain.GetLatestError(); /* なんで取得できなかったの? */ if (errorCode != err_Cancel) { /* キャンセルされたのなら問題無し。 */ ShowError(errorCode); } }
普通のスキャンはまぁこれだけでいけるんで、楽ちんではあるが、この方法は theTwain.EnableDS() 内でメッセージ取得しながらスキャン終わるまでずっとポーリングしつづける。

これがいやな場合に備えて、外部からメッセージ処理関数を呼ぶような仕組みも設けてあり、今回はDAT_IMAGEMEMXFERが必須であることからも後者の仕組みを使っているのであるが、そうすると、もう少し複雑になってしまうがまぁそのくらいのことは、止む無しってところだろうな。

もっと読みたい奇特なかたは、↓の読みたい月をクリックしてね。
2000|04|
2005|01|02|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|03|04|12|
2015|09|12|
2016|04|05|12|
2017|12|
2018|09|12|
2019|02|03|10|12|
2020|04|12|
2021|12|
2022|12|
2023|03|12|
2006年
5月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31


最新ツッコミ

  1. 青木@管理人 (10-09)
  2. こいち (10-09)
  3. 万年初心者 (04-01)
  4. 青木@管理人 (03-31)
  5. 万年初心者 (03-31)



  • 12月31日
    永劫回帰?!
  • 03月14日
    ランチに超高級カップ麺を食す。
  • 12月31日
    無為自然。
  • 12月31日
    今年もあと少し・・・
  • 12月31日
    大晦日。
  • 04月29日
    PCR検査陽性者数っていつの陽性者数?
    • 1. 日々の陽性者数はほぼほぼ意味無い。
  • 04月23日
    コロナ禍に思うこと。
    • 1. よんどころない話です。軽く読み飛ばしてください。
  • 04月22日
    買うとおカネが貰える?!
    • 1. 原油の価格がマイナスってナニソレ?!
  • 04月20日
    コロナ禍に思うこと。
    • 1. せめてもの報い。
  • 12月31日
    生きるということ。