iniファイルから文字列(実行ファイルのパス)を取得するには?

解決


masat21  2003-01-30 19:32:33  No: 76955

はじめまして、VB初心者のmasat21です。
現在、iniファイルから起動する実行ファイル名称を取得する処理を
作成しています。

OSはWindows2000で、VBのバージョンは.netです。

早速、質問ですが、Windows APIであるGetPrivateProfileStringA
を使用しても、iniファイルから該当する実行ファイル名称が取得
されません。(iniファイルの記述に間違いがないことも確認済みです。)

原因と対策方法についてご教示願います。
至急お願いします。

P.S.
VB .netは互換性がないと感じました。


takk  2003-01-30 19:47:30  No: 76956

取得する部分のソースを(あとAPIの宣言も)見ないとなんとも言えませんが…。


masat21  2003-01-30 20:07:39  No: 76957

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"


takk  2003-01-30 20:35:06  No: 76958

まず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  2003-01-30 21:04:03  No: 76959

masat21です。
ご指摘のとおり、LongをIntegerに、データ返却時にReturnを使用
することで、iniファイルからの文字列取得に成功しました。
ありがとうございます。


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

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






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