はじめまして、VB初心者のmasat21です。
現在、iniファイルから起動する実行ファイル名称を取得する処理を
作成しています。
OSはWindows2000で、VBのバージョンは.netです。
早速、質問ですが、Windows APIであるGetPrivateProfileStringA
を使用しても、iniファイルから該当する実行ファイル名称が取得
されません。(iniファイルの記述に間違いがないことも確認済みです。)
原因と対策方法についてご教示願います。
至急お願いします。
P.S.
VB .netは互換性がないと感じました。
取得する部分のソースを(あとAPIの宣言も)見ないとなんとも言えませんが…。
masat21です。
先ほどは言葉が足りなくて失礼しました。
実際に実行したときの宣言文、ソース、test.iniの内容を以下に示します。
よろしくお願いします。
[宣言文(Module1.vb)]
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 Long, _
ByVal lpFileName As String) As Long
[ソース(Module1.vb)]
Function INI_DBPATH_READ(ByVal sFilePath As String) As String
Dim linebuf As String
linebuf = New String(CChar(" "), 256)
Dim buf As String
buf = New String(CChar(" "), 256)
Dim ret As Long
'linebuf = Space(256)
'buf = Space(256)
ret = GetPrivateProfileString("section", "entry", "",
linebuf, 256, sFilePath)
If ret > 0 Then
buf = Left(linebuf, InStr(linebuf, Chr(0)) - 1)
INI_DBPATH_READ = buf
End If
End Function
[test.iniの内容]
[section]
entry="c:\work\test.ini"
まずAPIの宣言ですが、.NETでは Integerが32bit、Longが64bitに変更されています。
なので、VB6でのLongは全てIntegerに変える必要があります。
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
次にFunction部分ですが、上記と同じ理由でLongをIntegerに変更します。
あとデータを返す時はReturnを使うの.NET流だそうです。
あとは見たところ問題なさそうです。
Function INI_DBPATH_READ(ByVal sFilePath As String) As String
Dim linebuf As String
linebuf = New String(CChar(" "), 256)
Dim buf As String
buf = New String(CChar(" "), 256)
Dim ret As Integer
'linebuf = Space(256)
'buf = Space(256)
ret = GetPrivateProfileString("section", "entry", "",
linebuf, 256, sFilePath)
If ret > 0 Then
buf = Left(linebuf, InStr(linebuf, Chr(0)) - 1)
Return buf
End If
End Function
こんな感じでどうでしょうか?
masat21です。
ご指摘のとおり、LongをIntegerに、データ返却時にReturnを使用
することで、iniファイルからの文字列取得に成功しました。
ありがとうございます。
ツイート | ![]() |