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)
でエラーが発生してしまいます。
解決方法を教えてください。
そのものではありませんが、関係あります。
ご参考までに・・・
※ XMLファイル化された方が、無難ですヨ!
シリアライズと言う単語で検索してみて下さい。
以上。
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ファイル化された方が、無難ですヨ!
同感です。
InStr(BUFFER1 & Chr(0), Chr(0)) - 1
と、引数の型変換で解決できました。
皆さん、大変ありがとうございました。
助かりました。
ツイート | ![]() |