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
ちなみにGetPrivateProfileStringはどこにどのように宣言していますか。
# VB6環境が今手元にないのでうろ覚え。
確かバッファ領域の確保が必要だったよぅな気が。
If Dir(iniFileName1, vbNormal) <> "" Then
の直後に
strKey = String(512, " ")
とかでどぅでしょう。
回答ありがとうございます。
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
回答ありがとうございます。
さるべーじさんの言うように対応しましたら、
エラーは出なくなりましたが、
iniファイル内のKey=5の"5"は取得できませんでした。
何がいけないのか解らないのですが、どう記述したら良いのでしょうか?
よろしくお願いします。
strKey = Left$(strKey, InStr(1, strKey, vbNullChar & vbNullChar) - 1)
やってみて下さい。
こんな感じ
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
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
みなさん回答ありがとうございます。
みいさんの回答を対応したのですが、実行時エラー'5':
プロシージャの呼び出し、または引数が不正です。
が出てしまい、自力で解決出来ませんでした・・・すいません
あああさんの回答を参考に期待する動作が出来るようになりました。
Sayさんの回答も、これから参考にさせて頂きます。
あう、ごめんなさい。
pos = InStr(1, strKey, vbNullChar)
If pos > 0 Then
strKey = Left$(strKey, pos - 1)
End If
で多分いけるのではないかと。
今テスト環境がないんで、試せない…。
NULL文字探して、あったらそこまでで切るという処理です。
Chr(0)とvbNullCharが同じというのが解ってたら
あああさんのコードがうまくいって、みいさんの
コードがうまくいかない理由が解って自力で解決
出来たのに・・・残念。
ツイート | ![]() |