CFileDialogで障害

解決


Gammodler  2009-02-26 01:45:40  No: 69742

CFileDialogで障害

VC6,MFC、XPです。

変哲のない下記プログラムで障害が発生します:

CFileDialog   myDLG(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,TEXT(abc));      //Unicode対応にするため"TEXT"
if(myDLG.DoModal() != IDOK) 
   return;

ファイルダイアログが開き、そのウインドウ範囲で単にマウスを這わせているだけで、突然このウインドウのみならず親ウインドウまでこけてしまいます。
頻度は操作者にもよりますが稀です。

ダブルクリックあるいはOKボタンによるファイル選択の機能は問題ありません。

障害はマウスのクリック時には起きません。

おそらく解決策はこの範囲にはなく、バックグラウンドで動作する別スレッド、OnTimerなどの影響も考慮の対象に含めるべきなのでしょう。

なにかヒントがあればお願いいたします。


瀬戸っぷ  2009-02-26 09:07:57  No: 69743

Adobe Reader 7.0、入っていませんか?
結構古い話ですが……。

http://www.google.co.jp/search?num=30&hl=ja&q=GetOpenFileName+%22Adobe+Reader+7.0%22&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja


Gammodler  2009-02-28 04:24:46  No: 69744

瀬戸っぷ様

  回答ありがとうございます。

  障害はファイル選択後ではなく、ダイアログウインドウ内でマウスを這わせているときに発生します。

  したがって拡張子の配列サイズの問題ではないようです。

  ダイアログプログラム内のファイル名を取得するところでブレーキをかけ、マウスを這わせていたところ、ブレークアウトしてしまいました。
バンドルされていない例外は    SHELL32.DLLにあります、とでます。

どうもデスクットにそのまま置いたファイル群の上を這わせるときに起きる感じです。

この症状に特化して別スレッドで聞いてみます。

なにかコメントありましたらお願いたします。


瀬戸っぷ  2009-02-28 09:55:18  No: 69745

検索で最初にココの掲示板の過去ログが出て…
他の所は見ていないようで。

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200507/05070043.txt

マウスカーソル合わせるだけで落ちる事例があります。
ポップアップで概要などを表示する機能が悪さしているのかも知れませんが。


Gammodler  2009-03-01 01:06:33  No: 69746

瀬戸っぷ様

再コメントありがとうございます。

ご示唆いただいたところおよびネットを検索、以下の要因が関与する可能性があることがわかりました。

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.デスクトップフォルダに対象ファイルをおかない

  これが最も効果的でした。試みた範囲では一度も不具合は発生しません。

  デスクトップという日本語フォルダに問題があるようです。

  奇妙なことにデスクトップの一段下に半角のフォルダを作り、ここをファイルダアログで開くと起きません。デスクトップという日本語フォルダの下にあるにもかかわらずです。
  全角、スペースのあるフォルダ直下に対象ファイルをおくのは避けた方がよさそうです。

  どうもすっきりしない解決です。なにかコメントありましたらお願いします。


wclrp ( 'o')  2009-03-01 09:21:19  No: 69747

そりゃ不具合があったのはAdobe Reader 7だから意味ないよ。

CFileDialogを使うだけのプログラムでも起きる現象なら
たぶんシェルエクステンション関係のバグと思う。
でも他人の作ったDLL内の不正な処理なんて原因を調べるの難しいね。
あるアプリの特定の拡張子だけで起きるならそれ関連に原因があるかもしれないけど。

デスクトップは日本語というだけでなく仮想ディレクトリだよね。


中身がMPEG-2で拡張子がMPGとなっているファイルがあり
そのファイルを選択しただけでエクスプローラのプレビュー機能が
それを再生しようとして
よくエクスプローラがお亡くなりになった。


Gammodler  2009-03-05 00:46:12  No: 69748

wclrp ( 'o') 様

  うっかりウオッチしていませんでした。コメントありがとうございます。

  小生のようなど素人には、ネット上に散見する知見を集めてトライするのが関の山。

  デスクトップが仮想ディレクトリ、というところがキーなのかもしれませんね。日本語ディレクトリで必ず障害が起きるわけでもないようなので。

  それにしてもVC8はおそらく出現して8年もたち、おびただしい開発技術者が使い込んできた枯れた処理系とばかり思っていました。

  まあ真相は不明ですが。


Gammodler  2009-03-09 08:07:23  No: 69749

すいません。解決のチェック忘れました


Gammodler  2009-03-09 08:07:25  No: 69750

すいません。解決のチェック忘れました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加