0

レジストリから文字列値を読み取り、それを別の特定の文字列と連結したいと考えています。次のように RegQueryValueEx() を呼び出しています。

Dim lResult As Long
Dim sLength As Long
Dim sString As String

sString = Space$(256)
sLength = 256

lResult = RegQueryValueEx(hKey, "MyKey", 0, REG_SZ, ByVal sString, sLength)
MsgBox sString & "blah-blah-blah"

RegQueryValueEx() は正常に動作します。sString で必要な文字列を取得しており、MsgBox で表示することもできます。しかし、それを「some_string」と連結しようとすると、sString しか表示されません。助けてください。

ありがとう

4

6 に答える 6

6

VB 文字列は、文字列の内容の直前に文字列の長さをメモリに格納するため、文字列に null 文字が含まれている可能性があります。あなたの場合、その長さは 256 です。RegQueryValueEx を使用してコンテンツをロードすると、文字列が null で終了しますが (C スタイル)、指定された長さは変更されないため、VB の世界では 256 文字のままです。次に、2 番目の文字列を追加すると、最初の 256 文字の後に追加されますが、MsgBox は null 文字までの内容しか表示しません。

RegQueryValueEx は実際のデータの長さを sLength に入れるため、この行を MsgBox の前に追加できます。

sString = Left$(sString, sLength)
于 2008-12-03T18:11:53.327 に答える
1

もしかして、優先順位の問題?試してみてはどうですか:

MsgBox(sString & "blah-blah-blah")

または

Dim sDisplay as String
sDisplay = sString & "blah-blah"

MsgBox sDisplay
于 2008-12-03T17:44:31.683 に答える
0

文字列が途中で終了するように、文字列に 0 文字が含まれている可能性がありますか?

于 2008-12-03T17:49:25.463 に答える
0

最後にヌル文字を取り除く必要があります。VB6 用に作成済みでテスト済みのレジストリ モジュールを入手することをお勧めします。 これは vbnet からの別の例ですが 、null を取り除きたい場合は、私が使用したものをここに示します。

Public Function StringFromBuffer(ByRef strBuffer As String) As String
' Extracts String From a Buffer (buffer is terminated with null)
' 06/30/2000 - WSR

Dim lngPos As Long

    ' attempt to find null character in buffer
    lngPos = InStr(1, strBuffer, vbNullChar)

    ' if found
    If lngPos > 0 Then

        ' return everything before it
        StringFromBuffer = Left$(strBuffer, lngPos - 1)

    ' if not found
    Else

        ' return whole string
        StringFromBuffer = strBuffer

    End If ' lngPos > 0

End Function ' StringFromBuffer
于 2008-12-03T18:03:12.830 に答える
0

Mid$ と sLength を使用して、sString から文字列値を引き出します。このようにして、余分な文字(ヌルターミネータ「0」など)による奇妙さを超えます

Win32 API を扱うときは、VB の規約とは異なる C の規約を前提としていることを覚えておく必要があります。そのため、送信する前にクリーンアップを行う必要があります。

于 2008-12-03T18:06:27.550 に答える
0

私がしたとき、それは私のために働いた:

sString = Left$(sString, sLength-1)

実際、問題は文字列の末尾にあるヌル文字でした。

みんなありがとう!

于 2008-12-04T08:31:31.500 に答える