• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:API のString型戻り値について)

API のString型戻り値について

このQ&Aのポイント
  • VB6.0からVB.NETへ移行中で、iniファイルから文字列を取得するAPI GetPrivateProfileStringについてわからない点があります。
  • VB6.0ではlpReturnedStringには指定したバッファ分文字列が返ってきましたが、VB.NETでは指定したバッファ分ではなく文字数分のみ返ってきてしまいます。
  • また、文字列が抜けてしまう状態になります。どのように対応すれば良いのか教えてください!

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

質問の内容を勘違いしてたらごめんなさい >後ろの " が抜けてしまう Text = "INIファイルの読み込みテキスト" のようになっている時引用符が取り除かれるのは仕様です。 http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_getprivateprofilestring.htm >文字数分のみかえってきてしまいます NULL終端文字列をそのように扱うようになっているということだと思います。 ちょっと何が問題なのかよくわかりません。

参考URL:
http://www.bcap.co.jp/hanafusa/dotnet/sys05.htm
usagi_suki
質問者

お礼

ご回答ありがとうございました。 色々調べてみましたが、皆さんの回答、参考になりました。 お陰様でどうにか回避できました。 http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp06_GetPrivateProfileString.html もなかなか参考になります。 よろしかったら、ご覧ください。 ありがとうございました。

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

その他の回答 (1)

回答No.2

間違ってたらごめんなさい。 >文字列AAAだとすると、"AAA だけで、後ろの " が抜けてしまう状態 これは、インスタントウォッチ等で確認した結果でしょうか。もしそうであるなら、AAAの後にNull終端文字列が付いています。VBで言うところのvbNullCharです。通常、APIはCで書かれているので、文字列の最後にvbNullCharが文字列の終わりを示す意味で付加されます。 VB.NETの場合、vbNullCharで表示を止めてしまうようです。VB6の場合、文字化けして表示されると思います。 試しに 取得した文字列変数.Replace(vbNullChar, "") を行ってみてください。内容確認して"AAA"となれば間違いないと思います。

usagi_suki
質問者

お礼

ご回答ありがとうございます。 なんとか無事回避できました。 VB6.0では、nSize = Space(256) と最初にバッファを確保しておくと、OUTのlpReturnedStringに文字列+確保した残りのバイト分(256バイト分-文字列バイト分)が上書きされて渡されてきていたのですが、VB.NETではString型のOUTパラlpReturnedStringが違う動きをしてしまうようです。 http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp06_GetPrivateProfileString.html が参考になりました。 本当にありがとうございました。

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

関連するQ&A