iniファイルの読み込みを行うには?

解決


ゆう  2005-03-11 19:48:16  No: 120169

iniファイルの読み込みを行いたいのですが、
下記ソースでGetPrivateProfileStringを実行すると
下記エラーが発生してしまいます。
どのように記述したら良いのでしょうか?
私の環境はVB6です。
よろしくお願いします。

vb6.exe - アプリケーションエラー
"0x77f883ca"の命令が"0x00000000"のメモリを参照しました。メモリが"written"になることはできませんでした。

Private Sub Test()
    Dim lng_ret As Long
    Dim strKey As String
    Dim iniFileName1 As String
    
    iniFileName1 = App.Path & "\TEST.INI"
    
    If Dir(iniFileName1, vbNormal) <> "" Then
        lng_ret = GetPrivateProfileString("TEST", "Key", "1", strKey, 1, iniFileName1)
    Else
        strKey = 1
    End If
End Sub

TEST.INIの内容です
[TEST]
Key=5


みい  2005-03-11 20:32:46  No: 120170

ちなみにGetPrivateProfileStringはどこにどのように宣言していますか。


さるべーじ  2005-03-11 20:37:08  No: 120171

# VB6環境が今手元にないのでうろ覚え。

確かバッファ領域の確保が必要だったよぅな気が。

    If Dir(iniFileName1, vbNormal) <> "" Then

の直後に

    strKey = String(512, " ")

とかでどぅでしょう。


ゆう  2005-03-11 20:54:39  No: 120172

回答ありがとうございます。
GetPrivateProfileStringは同モジュール内の一番上に下記を記載しています。

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


ゆう  2005-03-11 21:06:19  No: 120173

回答ありがとうございます。
さるべーじさんの言うように対応しましたら、
エラーは出なくなりましたが、
iniファイル内のKey=5の"5"は取得できませんでした。
何がいけないのか解らないのですが、どう記述したら良いのでしょうか?
よろしくお願いします。


みい  2005-03-11 21:11:37  No: 120174

strKey = Left$(strKey, InStr(1, strKey, vbNullChar & vbNullChar) - 1)
やってみて下さい。


あああ  2005-03-11 21:18:26  No: 120175

こんな感じ

  Dim W As String * 1024
  Dim ret As Long
  Dim strOut As String
  ret = GetPrivateProfileString(section, Key, "", W, 1024, strFName)
  If ret = 0 Then
    strOut = strDefault
  Else
    strOut = Left(W, InStr(W, Chr(0)) - 1)
    If strOut = "" Then
      strOut = strDefault
    End If
  End If
  fncGetIni = strOut


Say  2005-03-11 21:44:07  No: 120176

Textプロパティに放り込むときに\0を処理してくれることを活かして、
手抜きするならたとえばこう。

    Dim strKey As String
    strKey = "1"
    If Dir(App.Path & "\TEST.INI", vbNormal) <> "" Then
        strKey = Space(1024)
        Call GetPrivateProfileString("TEST", "Key", "1", strKey, 1024, App.Path & "\TEST.INI")
        Text1.Text = strKey
        strKey = Text1.Text
    End If
    MsgBox strKey


ゆう  2005-03-11 22:24:23  No: 120177

みなさん回答ありがとうございます。
みいさんの回答を対応したのですが、実行時エラー'5':
プロシージャの呼び出し、または引数が不正です。
が出てしまい、自力で解決出来ませんでした・・・すいません
あああさんの回答を参考に期待する動作が出来るようになりました。
Sayさんの回答も、これから参考にさせて頂きます。


みい  2005-03-12 05:09:25  No: 120178

あう、ごめんなさい。
pos = InStr(1, strKey, vbNullChar)
If pos > 0 Then
 strKey = Left$(strKey,  pos - 1)
End If
で多分いけるのではないかと。
今テスト環境がないんで、試せない…。
NULL文字探して、あったらそこまでで切るという処理です。


通りすがり  2005-03-12 07:35:29  No: 120179

Chr(0)とvbNullCharが同じというのが解ってたら
あああさんのコードがうまくいって、みいさんの
コードがうまくいかない理由が解って自力で解決
出来たのに・・・残念。


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

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






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