• ベストアンサー

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

  • API関数フック Unicode版とANSI版?

    API関数フック なぜUnicode版とANSI版の区別があるのか? 関数名StartDocでAPIフックを仕掛けましたが引っ掛かりません MSDNを参照したら Unicode版とANSI版を実装 とあります 関数Messageboxにも同様な記載があり、参考にしておりますサンプルコードではMessageboxWとMessageboxAの関数名でフックを仕掛けております これにヒントを得てStartDocAとStartDocWの関数名でフックしましたらOKでした そこで質問です アプリでStartDoc関数を使用する時はStartDocA、StartDocWを区別せず全てStartDocだけで呼出しており正常に機能しております なぜStartDoc関数をフックする時のみStartDocA、StartDocWの両者を区別する必要があるのですか? 関数名StartDocでフックすればアプリを組む時と同じようにUnicode、ANSIの両者に対応してくれないのでしょうか?

  • CFileでのunidode保存

    はじめまして、質問させてください。 VC++ 2005 MFCで開発しております。 CFile, CStdioFileを使用してファイルを作成した場合に ファイル自体の文字コードを「Unicode」にしたいと考えております。 いろいろ試行錯誤いたのですがうまくいきませんでした。 アウトプットとしましては 出力したファイルをメモ帳等で開いた場合に 文字コードフィルタが 「ANSI」ではなく「Unicode」になっていることです。 ファイル作成時にUnicodeにできなくても 作成後にAPI等を使用して文字コードのみ変更する方法でもかまいません。 ちなみにプロジェクトの文字セットは「Unicode文字セット」を使用しております。 どなたかお詳しい方がおられましたらご教授お願いいたします。 宜しくお願いいたします。

  • MFC、APIについて教えてください

    はじめまして、dio-dioです。 今回からこのOKWaveにお世話になります。 よろしくお願いいたします。 早速ですが、質問させていただきます。 私はSE目指してプログラムを勉強していますが、 MFC,APIを使って2つのファイルを比較し、合成して 新たなファイルを作成するというプログラムを 作成することになりました。 ファイルはiniファイルを用います。 私はVB6を使用したことがあるのですが、形は似ていても MFCはまったく違う形式の言語です。 今まで一度もMFC使用したことがありません。 APIの関数も使用したことがありません。 そこでみなさまに助けていただきたいのです。 MFCの使用方法がよく分かるサイト、本など知っている方 教えてください。 あと、APIを使用したプログラムを作成するに当たって、 サンプルプログラムなどが記載されていてすぐにでも プログラム作成に参考になるようなサイトを知っている方 教えてください。 とてもわがままなお願いでしょうが大変困っています。 2週間でプログラムを作成しなければならず、時間がありません。 みなさまの助けが必要不可欠です。 どうか宜しくお願いいたします。

  • 一つのバイナリでUnicodeとANSI対応は可能ですか?

    一つのバイナリでUnicodeとANSI対応は可能ですか? Win7でプログラムを組んでおり、普段からUnicodeを使用しております。 最近、Win98にも使えるプログラムを組んでほしいと言われましたが 一つのバイナリでUnicodeとANSIの対応って可能ですか? 例えば、Win98なら、GetWindowTextAといったANSI用SDKを使えば可能かなと思っていますが 実際には試していません(手元にWin98がありません) 画面を表示して、ユーザーが入力を行いますが、EDITコントロールに入力されたデータを GetWindowTextAとGetWindowTextWの両方で切り分けて取得できたとしても EDITコントロール自体が、一つのバイナリでANSIとUnicodeに対応してくれるのでしょうか? 分かりづらい質問で申し訳有りません。 WinRARとか見ると、内部で~~~Aと~~~Wで切り替えて動いているように見えるので 多分出来るのではと思っていますが・・・

  • GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・

    お世話になっています。 iniファイルを読込み、各変数に代入するC言語のDLLを作成したいのです。 このサイトの投稿や、MSDNなどにも載っていたのですが、 少し理解に苦しみます。 現在まで、理解した点がwindows.hのインクルードを 記述するところ辺りです。 iniファイルは下記のようなレイアウトです。 ---<mst.ini>---------------------------- [user] name=username ID=userid [pc] pcname=FMV ---------------------------------------- #include<windows.h>は記述することまでは 分かりましたが、以下から進みません。。。 GetPrivateProfileString("") 初心者で申し訳ありませんが、お助け願います。

  • UNICODE文字が書き込めるWriteprivateProfileStringのようなファイルに書き込む関数はないですか?

    お世話になります。 VC++ MFC VisaualStidio 2003 で開発しております。 UNICODE文字が書き込めるWriteprivateProfileStringのようなファイルに書き込む関数はないでしょうか? ファイルを使用して、他EXEとやり取りしているのですが、WriteprivateProfileStringは、ANSI文字にもある文字しか使用できないみたいです。 「森鷗外𠮟る」などのUNICODEにしかない文字をファイルを経由して他EXEに渡したいのです。 よろしくお願いします。

  • UNICODE定義されている場合の関数のサンプル

    お世話になります。 VC++で開発している初心者です。 UNICODE定義されているため、一般的に?使用されている関数が使えません。 MSDNを見て、例えば、strcpyの場合は、UNICODE対応の_tcscpyを使えよ、という事は調べられるのですが、実際に使用しているサンプル文が無く、悪戦苦闘しております。 UNICODE定義用の関数一覧のサンプル文が載っている(勉強できる)HP等ございましたら、教えて頂けませんでしょうか。 宜しくお願い致します。

  • iniファイル内の行を削除する方法

    iniファイルの使い方自体を間違えているのかも知れませんが、 わからないので教えてください。 VB6でiniファイルを作成しています。 使用しているAPIは「WritePrivateProfileString」です。 iniファイルの内容が以下のようにあったとします。 これは上記のAPIで出力しています。 [a] a1=xxxx a2=yyyy a3=zzzz プログラムでiniファイルを読み込み、 画面上である操作をしたとして、iniファイルを更新します。 結果、以下のような内容にするには、どのようにしたらよいのでしょうか。 [a] a1=xxxx a2=zzzz a1、a2を出力するところまではできるのですが、 a3の行を削除する方法がわかりません。 もしAPIでこの行を削除する方法がなければ、 iniファイルを削除して、再作成すればよいのだと思います。 その際には、iniファイルを削除するAPIがあるのでしょうか。 KillステートメントやOpenステートメントを使うのが一般的なのでしょうか。 よろしくお願いいたします。

  • この文字コードは?

    大変お恥ずかしいレベルの質問です C#で印刷プログラムを作成しました プリンタ出口(注)で待ち構えて出力ログを取ったところ 半角文字の A ⇒ 0024 半角文字の J ⇒ 002D 半角文字の 1 ⇒ 0014 半角文字の 9 ⇒ 001C 全角文字の 印 ⇒ 0F33 全角文字の 験 ⇒ 3982 全角文字の に ⇒ 50D1 全角文字の る ⇒ 50F1 となって出力されています UNICODEやANSIであれば A は 0041 となると思いますが 0024 なのです これは如何なる種類の文字コードなのでしょうか? C#ですから当然UNICODEコードが使われていると思ったのですが・・・・・ 色々調べましたが分かりません 宜しくご指導お願い申し上げます (注)実際の印刷出力では ExtTextOutW API でプリンタに渡しています そこでこの ExteTextOutW API にフックを仕掛けてパラメータをダンプしたのです

  • INIファイル 構成ファイル反映方法

    見て頂きありがとうございます 昨日も投稿させて頂き、Webサイト等教えていただき勉強をしているのですが、文字列を読み込み メッセージとして表示は出来るようになったのですが、その情報を起動時に反映させる方法がわからなく 再度投稿させて頂きました HPなどで 見て API宣言はわかったのですが 反映方法などアドバイス頂けると助かります やりたい事 Accessにて メインフォームを起動時にINIファイル読み込み COMMポートが開いていたら 起動 開けなかったら ←INIファイル読み込み失敗したら メッセージを 出す  INIファイル PortNum=COM4 標準モジュールでAPI宣言 GetPrivateProfileString と GetPrivateProfileint を宣言 メインフォームを起動時に INIファイル読み込みを行う場合 どこに プログラムを書けば宜しいのでしょうか? VB一ヶ月前後の知識で わかりにくい、的外れな質問が多いかとは 思いますが お力を貸していただけると 本当に助かります 

専門家に質問してみよう