VB.NETでiniファイルのデータを取得するには?

解決


ほんちゃん  2003-12-17 19:53:38  No: 80949

VB.NETでiniファイルの取得ができません。

    Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer

    Public INI_FILE As String

    Public BUFFER1 = New String(CChar(" "), 256)

    Public Function PRE_INIFILE() As String
        INI_FILE = CurDir() & "\PLシート作成システム.INI"
    End Function

    Public Function READ_INIFILE(ByVal ApplicationName As String, ByVal KeyName As String, ByVal FILENAME As String) As String
        If GetPrivateProfileString(ApplicationName, KeyName, "", BUFFER1, 128, FILENAME) = 0 Then
            READ_INIFILE = ""
        Else
            READ_INIFILE = Left(BUFFER1, InStr(BUFFER1, Chr(0)) - 1)
        End If
    End Function

というような関数を作成しました。

If GetPrivateProfileString(ApplicationName, KeyName, "", BUFFER1, 128, FILENAME) = 0 Then

で、ここをデバッグで過ぎるとKeyNameとFILENAMEの文字列が3分の1ぐらい削れてしまい

READ_INIFILE = Left(BUFFER1, InStr(BUFFER1, Chr(0)) - 1)

でエラーが発生してしまいます。
解決方法を教えてください。


岡田 之仁  2003-12-17 20:07:03  No: 80950

そのものではありませんが、関係あります。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbconupgraderecommendationadjustdatatypesforwin32apis.asp

ご参考までに・・・

※  XMLファイル化された方が、無難ですヨ!
    シリアライズと言う単語で検索してみて下さい。

以上。


魔界の仮面弁士  2003-12-17 20:17:25  No: 80951

P/Invokeする場合は、ANSI、Unicodeの指定を明示的に行う事をお奨めします。

>> READ_INIFILE = Left(BUFFER1, InStr(BUFFER1, Chr(0)) - 1)
「InStr(BUFFER1, Chr(0)) - 1」ではなく、
「InStr(BUFFER1 & Chr(0), Chr(0)) - 1」にしてみるとか。

> ※  XMLファイル化された方が、無難ですヨ!
同感です。


ほんちゃん  2003-12-17 23:36:06  No: 80952

InStr(BUFFER1 & Chr(0), Chr(0)) - 1
と、引数の型変換で解決できました。

皆さん、大変ありがとうございました。
助かりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加