CFileDialogで障害
VC6,MFC、XPです。
変哲のない下記プログラムで障害が発生します:
CFileDialog myDLG(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,TEXT(abc)); //Unicode対応にするため"TEXT"
if(myDLG.DoModal() != IDOK)
return;
ファイルダイアログが開き、そのウインドウ範囲で単にマウスを這わせているだけで、突然このウインドウのみならず親ウインドウまでこけてしまいます。
頻度は操作者にもよりますが稀です。
ダブルクリックあるいはOKボタンによるファイル選択の機能は問題ありません。
障害はマウスのクリック時には起きません。
おそらく解決策はこの範囲にはなく、バックグラウンドで動作する別スレッド、OnTimerなどの影響も考慮の対象に含めるべきなのでしょう。
なにかヒントがあればお願いいたします。
Adobe Reader 7.0、入っていませんか?
結構古い話ですが……。
瀬戸っぷ様
回答ありがとうございます。
障害はファイル選択後ではなく、ダイアログウインドウ内でマウスを這わせているときに発生します。
したがって拡張子の配列サイズの問題ではないようです。
ダイアログプログラム内のファイル名を取得するところでブレーキをかけ、マウスを這わせていたところ、ブレークアウトしてしまいました。
バンドルされていない例外は SHELL32.DLLにあります、とでます。
どうもデスクットにそのまま置いたファイル群の上を這わせるときに起きる感じです。
この症状に特化して別スレッドで聞いてみます。
なにかコメントありましたらお願いたします。
検索で最初にココの掲示板の過去ログが出て…
他の所は見ていないようで。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200507/05070043.txt
マウスカーソル合わせるだけで落ちる事例があります。
ポップアップで概要などを表示する機能が悪さしているのかも知れませんが。
瀬戸っぷ様
再コメントありがとうございます。
ご示唆いただいたところおよびネットを検索、以下の要因が関与する可能性があることがわかりました。
1.Adobe Reader7をアンインストールする。
Adobe Reader8がインストールされていたので削除したのですが効果なし。Adobe Flush Playerも削除してみたのですがこれも影響なし
2.debugモードではなくReleaseモードでコンパイルする
これも効果なし。
3.myDLG.m_ofn.Flag=OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_EXPLORERをコメントアウトする。
やり方が分からないので試みていません。小生のプログラムではOFN_EXPLORERはありません。
窓の形状を変えるものらしくかなり有力なファクタのようです。
4.デスクトップフォルダに対象ファイルをおかない
これが最も効果的でした。試みた範囲では一度も不具合は発生しません。
デスクトップという日本語フォルダに問題があるようです。
奇妙なことにデスクトップの一段下に半角のフォルダを作り、ここをファイルダアログで開くと起きません。デスクトップという日本語フォルダの下にあるにもかかわらずです。
全角、スペースのあるフォルダ直下に対象ファイルをおくのは避けた方がよさそうです。
どうもすっきりしない解決です。なにかコメントありましたらお願いします。
そりゃ不具合があったのはAdobe Reader 7だから意味ないよ。
CFileDialogを使うだけのプログラムでも起きる現象なら
たぶんシェルエクステンション関係のバグと思う。
でも他人の作ったDLL内の不正な処理なんて原因を調べるの難しいね。
あるアプリの特定の拡張子だけで起きるならそれ関連に原因があるかもしれないけど。
デスクトップは日本語というだけでなく仮想ディレクトリだよね。
昔
中身がMPEG-2で拡張子がMPGとなっているファイルがあり
そのファイルを選択しただけでエクスプローラのプレビュー機能が
それを再生しようとして
よくエクスプローラがお亡くなりになった。
wclrp ( 'o') 様
うっかりウオッチしていませんでした。コメントありがとうございます。
小生のようなど素人には、ネット上に散見する知見を集めてトライするのが関の山。
デスクトップが仮想ディレクトリ、というところがキーなのかもしれませんね。日本語ディレクトリで必ず障害が起きるわけでもないようなので。
それにしてもVC8はおそらく出現して8年もたち、おびただしい開発技術者が使い込んできた枯れた処理系とばかり思っていました。
まあ真相は不明ですが。
すいません。解決のチェック忘れました
すいません。解決のチェック忘れました
ツイート | ![]() |