ファイル選択ダイアログで落ちる(5) 中間報告 / ファイル選択ダイアログで落ちる(6) / ファイル選択ダイアログで落ちる(7) / GDI+ / MFCでOpenGL

投稿日: 2005年05月30月

ファイル選択ダイアログで落ちる(5) 中間報告

身の回りのPC4台共で現象が再現した。が、どのマシンも自分が常用しているマシンであるため環境が似通りすぎていてあまり検証にならない。しかもAPI(GetOpenFileName)かMFC(CFileDialog)も関係ないみたい。manifestの有無(comctl32.dllのバージョン)でもないみたいだし、使用したSDKの違いでもなさげ。

再現したPCに共通する項目を挙げてみる

  • Windows XP SP2
  • Adobe Reader 7.0 を導入している
  • 関係ないと思うけど、フォルダオプションはちょっと弄ってる(拡張子を表示するとか縮小版をキャッシュしない、など)

それ以外はほぼインストールしたままの状態の放置マシンから、開発環境やらいろいろ入ってる現役マシンまであるので(ソフトウェア的に)共通する項目が見当たらない。ハードウェア的にはPentium3からPentium4(HT対応)まで世代が散らばってるので(Intel CPUに偏ってるけど)原因とは考えにくい。

メモ帳による再現方法を。

  • メモ帳を起動
  • メニューの「ファイル」-「開く」でファイル選択ダイアログを開く
  • デスクトップ上のアイコンにマウスカーソルを持っていきツールチップを表示させる。このときアイコンはフォルダでは再現しない。また、* キャンセルして一旦ファイル選択ダイアログを閉じる。
  • 再度同じ手順でファイル選択ダイアログを開きデスクトップ上のアイコンのツールチップを表示させようとすると落ちる。

同じ環境/違う環境で試された方は、ぜひ「再現した/しない」のツッコミ入れてください。その際、環境(OS/Adobe Readerのバージョン他)も書いてもらえるとより参考になります。

ファイル選択ダイアログで落ちる(6)

デバッグモードで実行すると、常にcall命令が発行されるところで落ちている。で、callする値を見ると確かに不正なアドレスを示しているんだけども、その先まで辿っていくのは自分のスキルを考えるとコスト高すぎ。

callするまえにレジスタを退避してるっぽいとかはなんとなくわかるんだけど、落ちる理由と対策まで探るのはムリポ。

けどこういうときのためにもアセンブリ言語は習得しておきたい。

追記:常にcall命令が発行されてるところというわけでもなさげ。ソースによって位置が違う。「落ちないアプリ」は破壊される領域がたまたま安全な領域というだけなのかも。

ファイル選択ダイアログで落ちる(7)

同じ現象が発生してる方ハケーン!

最後のURLから引用させてもらう。

この件は、Adobe Reader 6.0/7.0でインストールされるpdfshell.dll(通常はC:\Program Files\Adobe\Acrobat 7.0\ActiveX\pdfshell.dll)によるアクセス違反らしい。確かに、そのファイルを一時的に他に移すと、メモ帳が異常終了することはなくなった。

Adobeにも報告されたようなので、対応されることを祈りつつ下記コマンドを発行してpdfshell.dllに消えてもらう。

regsvr32 /u "C:\Program Files\Adobe\Acrobat 7.0\ActiveX\PDFShell.dll"

http://www.geocities.co.jp/SiliconValley-PaloAlto/5936/customize/unwished.html

追記:せっかくアンレジストしたのに次にReaderを起動したときに復元されてしまった・・・。アンインストールするしかないのかな。

それにしてもオンラインアップデートを確認すると「Adobe Acrobat 7.0.1およびReader 7.0.1アップデート」のステータスが「インストールされています」なのに「Adobe Readerについて」でバージョンを確認すると「バージョン 7.0.0」になっているのも少し気になる。

GDI+

MFCでOpenGL

http://odalab.spub.chitose.ac.jp/~oda/lang/opengl.html


この記事へのコメント

※ このコメントは旧ブログシステム(tDiary)からの移行です。

aさんからのコメント(2005-06-08 13:16:13)

私も同じ現象が発生しました。XPSP2,AdobeReader7.0.1でファイル選択ダイアログを開いた時に日本語名を含むフォルダだった場合に発生するようです。

名前:宮内 はじめ

Code for Nagoya名誉代表

E2D3名古屋支部長

プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。

プロフィール

お問い合わせ