ファイルの取得? 2

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
くりあ

ファイルの取得? 2

#1

投稿記事 by くりあ » 15年前

少し前に、ファイル選択ダイアログの使い方について質問し、
教えてもらったのですが、その時、
詳しく説明してくださっているサイトを紹介してもらいました。
少し見て理解できるかな?と思い解決にしてしまったのですが、
全然何とかなりませんでした、自分が甘かったです。
GetOpenFileName()を使うのは分かったのですが、
OPENFILENAME構造体が良く分かりません。
とりあえずサイトを参考にして書いてみたのですが、構造体の理解が足りないと思います。

とりあえずエラーを載せておきます。

error C2664: 'GetOpenFileNameW' : 1 番目の引数を 'OPENFILENAME' から 'LPOPENFILENAMEW' に変換できません。

どのようなエラーなのでしょう?構造体の宣言を間違えたのでしょうか?
よろしくお願いします。

Poco

Re:ファイルの取得? 2

#2

投稿記事 by Poco » 15年前

関数にOPENFILENAME構造体へのポインタを渡さなければならないのに、
OPENFILENAME構造体そのものを渡していませんか?
OPENFILENAME ofn;

GetOpenFileName( &ofn ); // OK
GetOpenFileName( ofn );  // NG

くりあ

Re:ファイルの取得? 2

#3

投稿記事 by くりあ » 15年前

ぽこさん、ありがとうございました。
エラーはなくなりとりあえず実行出来ました。
ダイアログが出るかどうかのテストで作ってデバッグで実行してみたのですが、
一瞬コマンドプロンプト?が出て閉じてしまいました。
ソースは、ほぼダイアログを表示するところと、その初期化情報のところ
くらいしか書いていません。これだけではだめなんですかね?
あとlpstrTitleとかって、文字列を入れるんじゃないんですかね?
ofn.lpstrTitle = "開く"
とかでエラーが出るのですが、どうしたら?
そもそも構造体がどうなっているのか良く分からないのですが……
良く分からない質問ですいません。

YuO

Re:ファイルの取得? 2

#4

投稿記事 by YuO » 15年前

> ダイアログが出るかどうかのテストで作ってデバッグで実行してみたのですが、
> 一瞬コマンドプロンプト?が出て閉じてしまいました。
> ソースは、ほぼダイアログを表示するところと、その初期化情報のところ
> くらいしか書いていません。これだけではだめなんですかね?

おそらく,ダイアログを開くことに失敗したのでしょう。
GetOpenFileName APIの戻り値を検証してください。
戻り値が0であるならば,エラーです。
CommDlgExtendedError APIを呼び出して,エラー原因を調べてみてください。

MSDN: GetOpenFileName Function ()
http://msdn.microsoft.com/en-us/library/ms646927.aspx
MSDN: CommDlgExtendedError Function ()
http://msdn.microsoft.com/en-us/library/ms646916.aspx


> あとlpstrTitleとかって、文字列を入れるんじゃないんですかね?
> ofn.lpstrTitle = "開く"
> とかでエラーが出るのですが、どうしたら?

lpstrTitleはLPCTSTR型,つまりconst TCHAR *型なので,
・UNICODEマクロが定義されていない場合はconst char *型
・UNICODEマクロが定義されている場合はconst wchar_t *型
を渡す必要があります。

ただし,Windows API関連で文字定数や文字列リテラルを使う場合は,
・charではなくTCHARを使う
・文字定数・文字列リテラルはTEXTマクロを使う
ことで,UNICODEを気にせず組むことが (ある程度) できます。

例示のコードは,
ofn.lpstrTitle = TEXT("開く");
のようになります。

なお,公式の資料はここになります。
MSDN: Unicode and Character Sets (Windows)
http://msdn.microsoft.com/en-us/library/dd374083.aspx


> そもそも構造体がどうなっているのか良く分からないのですが……

MSDNに載っていますよ。
MSDN: OPENFILENAME Structure ()
http://msdn.microsoft.com/en-us/library/ms646839.aspx

くりあ

Re:ファイルの取得? 2

#5

投稿記事 by くりあ » 15年前

YuOさん、回答ありがとうございます。
どうやらエラーのようです。
それで、CommDlgExtendedError APIが、コモンダイアログボックスのエラーを調べるもの
なのは調べて分かったのですが、使い方が良く分からなくて……
文字列の方は、コンパイルの方のエラーはなくなりました。
ダイアログがエラーなので確かめようがないのですが…。
URLの方も見てみたのですが、英語でわけが分からず……。
翻訳サイトを使って少しづつ理解していきたいと思います。

くりあ

Re:ファイルの取得? 2

#6

投稿記事 by くりあ » 15年前

CommDlgExtendedError APIは、
他の分からないところのついでに、
新規投稿で改めて聞こうと思います。
ありごとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る