我想从注册表中读取一个字符串值,并将其与另一个特定的字符串连接起来。我正在调用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。 Plz,帮帮我。
由于
答案 0 :(得分:6)
字符串中可能存在空字符,因为VB字符串将字符串的长度存储在字符串内容之前的内存中。在你的情况下,长度为256.当你使用RegQueryValueEx加载内容时,它会终止字符串(C风格),但不会更改其指定的长度,因此在VB世界中它仍然是256个字符长。然后当你追加第二个字符串时,它会在前256个字符后附加,但MsgBox只显示最多为空字符的内容。
因为RegQueryValueEx将实际数据的长度放在sLength中,所以可以在MsgBox之前添加这一行
sString = Left$(sString, sLength)
答案 1 :(得分:1)
优先权问题,也许吧?怎么样尝试:
MsgBox(sString & "blah-blah-blah")
或者
Dim sDisplay as String
sDisplay = sString & "blah-blah"
MsgBox sDisplay
答案 2 :(得分:0)
也许字符串包含0个字符,以便它过早结束?
答案 3 :(得分:0)
你需要在最后摆脱空字符。 我建议收到一份已经编写并经过测试的registry module for VB6。 Here is another example from vbnet 但是,如果你只是想摆脱零点,那么就是我用过的。
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
答案 4 :(得分:0)
使用Mid $和sLength从sString中提取字符串值。这样你就会因为额外的字符而感到陌生(比如空终结符'0')
请记住,当您处理Win32 API时,您必须记住它假定C约定与VB约定不同。所以在发送之前你必须做一些清理工作。
答案 5 :(得分:0)
当我这样做时,它对我有用:
string = Left $(string,Length-1)
问题确实是字符串末尾的空字符。
谢谢,伙计们!