none
VC++ 2005 .Net でGetPrivateProfileString を使用したい。 RRS feed

  • 質問

  • こんにちは、お世話になります。

    現在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")

    も行っています。

    ご教授願えますでしょうか・・・

    2006年10月12日 3:13

すべての返信

  • 本当にこの手の質問多いですね、、、

    http://cgi21.plala.or.jp/keny01/patio_32/patio.cgi?mode=view&no=250
    を参考にしてみてください。

    一番簡単なのは
    GetPrivateProfileStringA を使うことですかね。

    2006年10月12日 3:40
  • 蒼の洞窟

    またしてもお助けいただき、ありがとうございました。

    なるほど・・・

    デフォルトだとUnicodeなのですね・・・

    マルチバイトにすると他のコードでエラーがでてしまったため

    今回はとりあえず GetPrivateProfileStringA で対応させました。

    コンパイルも通りチェックすると、あれ?取れてない・・・?

    と一瞬思ったのですが・・・

    しかしながらお恥ずかしい点が・・・

    戻り値が 0 ではなかったためエラーかと思っていたのですが。

    ちゃんとbufにセットされておりました。

    int retの戻り値は1が帰ってきました。

    ただし、エラーのときでも1が帰ってくるようです。

    戻り値がDWORDなので INTで取ってはいけないようですね・・・

     

    2006年10月12日 4:19
  • GetPrivateProfileString の戻り値は、

    「関数が成功すると、バッファに格納された文字数が返ります(終端の NULL 文字は含まない)。」(ヘルプからの引用)

    です。「0ではない」をエラーとするのは多分適切ではないです。

     

    2006年10月12日 4:38