質問者
VC++ 2005 .Net でGetPrivateProfileString を使用したい。

質問
-
こんにちは、お世話になります。
現在Visual Studio 2005 C++ .NETで開発を行っており
INIファイルを取得するために
Win32 API のGetPrivateProfileString を使用して
取得しようとしております。
DWORD GetPrivateProfileString(
LPCWSTR lpAppName, // points to section name
LPCWSTR lpKeyName, // points to key name
LPCWSTR lpDefault, // points to default string
LPWSTR lpReturnedString, // points to destination buffer
DWORD nSize, // size of destination buffer
LPCWSTR lpFileName // points to initialization filename
);しかしながら、以下のようにcharのポインタを渡すことができません。
int ret;
char buf[255];
char buf2[255];
sprintf(buf2,"%s","KEY1");
memset(buf,0,sizeof(buf));
ret = GetPrivateProfileString("SECTION",&buf2[0],"0",&buf[0],sizeof(buf),"c:\\test.ini");
※buf2を渡しているところで
引数をchar*からLPCWSTRに変換できません。
※bufを渡しているところで
引数をchar*からLPWSTRに変換できません。
とコンパイルエラーがでます。
強制的にキャストするとコンパイルは通るようになるのですが、
ret = GetPrivateProfileString("SECTION",(LPCWSTR)&buf2[0],"0",(LPWSTR)&buf[0],sizeof(buf),"c:\\test.ini");
ret の戻り値が1でbufにはデフォルト値の "0"がセットされます。Nullではありません。
INIファイルのセクション名やキー名が間違っていないか。
ファイルがちゃんとあるかは確認したのですが。
他に何が間違っているのかわからず困っています。
windows.hはインクルードし
#pragma comment(lib,"kerner32.lib")
も行っています。
ご教授願えますでしょうか・・・
すべての返信
-
本当にこの手の質問多いですね、、、
http://cgi21.plala.or.jp/keny01/patio_32/patio.cgi?mode=view&no=250
を参考にしてみてください。
一番簡単なのは GetPrivateProfileStringA を使うことですかね。 -
蒼の洞窟 様
またしてもお助けいただき、ありがとうございました。
なるほど・・・
デフォルトだとUnicodeなのですね・・・
マルチバイトにすると他のコードでエラーがでてしまったため
今回はとりあえず GetPrivateProfileStringA で対応させました。
コンパイルも通りチェックすると、あれ?取れてない・・・?
と一瞬思ったのですが・・・
しかしながらお恥ずかしい点が・・・
戻り値が 0 ではなかったためエラーかと思っていたのですが。
ちゃんとbufにセットされておりました。
int retの戻り値は1が帰ってきました。
ただし、エラーのときでも1が帰ってくるようです。
戻り値がDWORDなので INTで取ってはいけないようですね・・・