現在 VC++7.0(開発環境 Window2000 SP3) でプログラムを作成しています。
完成し、いざ動作チェックという段階なのですが、
タイトルの通り Win98 で不具合が発生して困っております。
ソースは、ただ単純に
…
CFileDialog Dlg;
Dlg.DoModal();
という感じです。
Win2000, XP では、正常に動作するのですが(当然なんでしょうが・・・)、
98だと全く表示されません。
また、タイトルと関係ないのかもしれませんが、ダイアログ(これは自分のです)を
表示させると、リソースを大量に消費し、リソース不足に陥ります。
これもこの件と同様な問題なのでしょうか?
(特定のコントロールのような気もするのですが・・・といってもCEditのみですが・・・)
いろいろと情報を探して回っているのですが、これといったものがなく途方に暮れています。
どなたか回避方法のレスをよろしくお願いいたします。
すいません。
たぶん理解していただけると思うのですが、
CFileDlalog Dlg(TRUE, …);
と、引数はきちんと入れています。
手元にあるのはVC6なのですが……
>CFileDlalog Dlg(TRUE, …);
の引数、きちんと提示した方がいいかと。
Win2000以降でOPENFILENAME構造体が拡張されていたハズです。
その為、lStructSizeに入る値が変わっていると思われます。
Win9X系ではそのような構造体のサイズは知らないのでエラーになっているのではないでしょう
か?
瀬戸っぷさん、レスありがとうございます。
ご指摘通り、OPENFILENAME構造体のlStructSizeは違っているようですね。
これは、気づきませんでした。よく読めと怒られそうですね・・・スイマセン
ちなみに
CFileDialog dlg(bOpenFileDialog, lpszDefExt, lpszFileName, OFN_HIDEREADONLY
|OFN_OVERWRITEPROMPT, lpszFilter);
です。
私の関数の引数を使用しているため、こんな風になってます・・・。
よけいわかりにくくなるかなと思い省略させていただいた次第です。
「変な使い方はしていません」というつもりだったのですが、
誤解を招くかもしれませんので、確かにソースを正確に公開したほうがいいですね。
ご指摘ありがとうございます。
ただ、VC6にてコンパイルしたものは、98,2000とも正常に動作します。
VC7.0でコンパイルしたものに限ってこの現象が発生しているようなのです。
VC6.0は標準で OPENFILENAME_SIZE_VERSION_400 で、
VC7.0はsizeof(OPENFILENAME)ということなのでしょうかね・・・。
とりあえず試してみます。
ありがとうございました。
>ただ、VC6にてコンパイルしたものは、98,2000とも正常に動作します。
>VC7.0でコンパイルしたものに限ってこの現象が発生しているようなのです。
>VC6.0は標準で OPENFILENAME_SIZE_VERSION_400 で、
>VC7.0はsizeof(OPENFILENAME)ということなのでしょうかね・・・。
そうなっているのかも知れません。
なお、VC7のCFileDialogのコンストラクタは1つ引数が追加されているようです。
(第7引数でOPENFILENAME構造体のlStructSizeが制御できるらしい。)
手元に(VC.netが)ないので確認はしていないのですが………
おお!!・・・確かに書いてある
またまた、よく読めという感じですね(^_^;
なんせ VC6.0からコードの使い回しなので、全く持って気づきませんでした。
フィルターまでしか気がわまっていなかったもので・・・
コードを OPENFILENAME_SIZE_VERSION_400 へ変更してみたところ
確かにファイルダイアログの外見が Win98風?(あっさりしたやつ) に変化しました。
実際に動作確認するまでは断定できませんが、これでほぼ解決といったところでしょうね。
動作確認は、今手持ちにWin98の環境がないためできないのですが、
数日中に行ってみたいと思います。(友達のPCで(笑))
瀬戸っぷさん、いろいろとありがとうございました。
>なんせ VC6.0からコードの使い回しなので、全く持って気づきませんでした。
わりとありがちなようです。
(デフォルト引数が指定されているのかそのままでコンパイル通りますからねぇ)
ちなみに、以前どこぞの掲示板に同様の症状が書かれていたので記憶していた次第です。
ついでに、最近CFileDialog関係の質問にレスした時、掲示されていたソースがコンパイル出来
なかったから。
(VC6のヘッダファイル郡ではOPENFILENAME_SIZE_VERSION_400自体存在しませんし、
CFileDialogのコンストラクタは引数6つまで)
………最新のPlatform SDK入れた方がいいのだろうか。
(.netに移行するというのもありますが、メイン環境がWin98SEなのです。)
補足として………
http://forums.belution.com/ja/vc/
の過去ログを眺めている時に
http://forums.belution.com/ja/cbuilder/000/000/00s.shtml
を発見して、
関連情報でググっていたら
http://www.yks.ne.jp/~masato/room/devdiary/topic.html#20020907
というのを見つけたので印象に残っていた。
です。
瀬戸っぷさん、詳しい情報ありがとうございました。
最終的に
http://www.yks.ne.jp/~masato/room/devdiary/topic.html#20020907
に書いてあった方法(構造体サイズ0指定)で、OS別にきちんと
ファイルダイアログを開くことができました。
実際に、98の人に動作確認してもらったところ、
きちんと開けたという報告をいただきました。
(また、違うバグが出てきたんですが・・・(^_^;)
案外、全てのOSに対応するプログラムって難しいものですね・・・
これからは、よくドキュメントを読むようにします。(笑)
いろいろとありがとうございました。
会社のPCで使ってたとき NTAKA のハンドル名だったので
(ちなみに家のPCは NOBU、会社 NTAKA でした・・・)
そのままレスしちゃいました。
NTAKA = NOBU です。
紛らわしくてすいませんでした。
以後、気を付けますので勘弁してください。(^_^;