• ベストアンサー

GetPrivateProfileStringAについて

お世話になります。 VC++2003で作成したGetPrivateProfileStringを使ったプログラム参考にしてVC++2005でINIファイルを読み込むプログラムを作成したのですが、うまく読み込めないため、色々と調べた結果、GetPrivateProfileStringはUNICODE形式で、GetPrivateProfileStringAがANSI形式と記載していたHPを参考にGetPrivateProfileStringAを使用したところ、うまく読み込めました。 ただ、MSDNでGetPrivateProfileStringAを探しても見つからなかったので、このままGetPrivateProfileStringAを使用して良いのか迷っています。GetPrivateProfileStringAはどのような位置付けなのでしょうか?レガシーなAPIで使用はできるが現状ではサポートされていないのでしょうか? ご存知の方がいらっしゃいましたら、御教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

VisualC++ではUNICODEとマルチバイトのプログラムを同じソースでコンパイルできるハイブリッド仕様になっています 文字列を引数に取る関数は2種類用意され~A( )と~W( )と同じ関数名の最後にAとWをつけて区別しています。 普通はA,Wのない~( )で書いて実際の呼び出す関数は文字コードの設定に任せています。解説もこの関数名でしか書いてありません。 文字列もTEXT( )で囲んでchar型もTCHARやLPTSTRなどのハイブリッド型名を使うのがWindows方式になります。 ~A( )関数を使うよりプロジェクトのプロパティで使用する文字コードをマルチバイトに変更ましょう。

MUTOUSE
質問者

お礼

画像まで付けていただいて、誠にありがとうございます。 疑問点からやり方まで全て解決しました! 大変勉強になりました。 ありがとうございました!!!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • prophetok
  • ベストアンサー率44% (13/29)
回答No.1

読めなかったとは、作成したプログラムがUNICODEビルドしていたが、INIファイルがMS932で記述していたから? 文字コードの設定がUNICODEなら GetPrivateProfileStringは GetPrivateProfileStringW 文字コードの設定がMBCSなら GetPrivateProfileStringは GetPrivateProfileStringA としてコンパイルされるので、たぶんそうでしょうね。(下記参照) WinBase.h #ifdef UNICODE #define GetPrivateProfileString GetPrivateProfileStringW #else #define GetPrivateProfileString GetPrivateProfileStringA #endif // !UNICODE 今のままでもいいとは思うが、GetPrivateProfileString にしてiniファイルをUNICODEで記述するか、MBCSでビルドし直すか。

MUTOUSE
質問者

お礼

ビルドのコード系はそもそも知らなかったので、 デフォルトのままでしたが、 INIファイルはSJISでした。 大変勉強になりました。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A