« OGA例会 | トップページ | って言ってたよ(BlogPet) »

2006-10-05

UNLHA32.DLLを用いたファイル圧縮アプリケーションについてのメモ

以前書いたまま放置していた問題についてのメモ。
#この問題について検索を掛けてくる人が多いので。

関連記事:
プログラム悩み中
プログラムでUNLHA32
プログラム混迷中
プログラム堕落中

普通の圧縮アプリケーションでは、以下のような処理を行うだろう。

  1. 実行ボタンを押す。
  2. 圧縮を行う。
  3. ログを表示する。

ところが、これをそのままコーディングすると、以前書いたような問題が発生する。

UNLHA32.DLLを使って圧縮中、表示されているダイアログボックスの〔中断〕ボタンを押すとアプリケーションが異常終了してしまう。どうやらNT系Windowsで発生する有名な問題らしい。

この問題は多くの人が悩む問題らしく、このサイトにも検索を掛けてくる人が多い。私も悩んだ挙げ句にダイアログボックスを使わない方法を選択し、それをブログに上げた。

その後、ログを垂れ流している間ウィンドウの再描画が行われないために、別のウィンドウがウィンドウに掛かったときに白く抜けてしまうことが判明した。それに対応するためにマルチスレッドで処理することを選択したところ、なんと先述の問題までもが解決してしまった。

つまり、以下の流れで行けばうまく行くということ。

  1. 実行ボタンを押す。
  2. 別スレッドを起動する。
  3. 別スレッドで圧縮を行う。
  4. 別スレッドでログを表示する。
  5. 別スレッドを終了する。

これでうまく行く。コンパイルの際、「-WM」オプションを忘れないこと(BCCの場合。VCの場合は自分で調べるように)。

あと、ソース。晒すのはスゲェ恥ずかしいのだが、後進のために。
「backup.cpp」をダウンロード
DLL化した自作関数を含んでいるが、その辺は自分で解析して欲しい。
#どうしてもわからないという人はコメント欄に投稿してください。何とか対応してみますから。

参考サイト:
MSDN Library Japan
猫でもわかるプログラミング

|

« OGA例会 | トップページ | って言ってたよ(BlogPet) »

コンピュータ・プログラム」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/1757/12164916

この記事へのトラックバック一覧です: UNLHA32.DLLを用いたファイル圧縮アプリケーションについてのメモ:

« OGA例会 | トップページ | って言ってたよ(BlogPet) »