Dim s As String
Dim ret As Long
Dim Num As String
Dim lens As Long
 ret = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\bailang", ret3)
 If ret = 0 Then
   RegSetValue HKEY_LOCAL_MACHINE, "SOFTWARE\bailang", REG_SZ, 20, lens
   RegQueryValue HKEY_LOCAL_MACHINE, "SOFTWARE\bailang", s, lens
 End If
我给“bailang”赋值为20可读出来的s=0,lens=3.
为什么不对呢?

解决方案 »

  1.   

    试一下:Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
    Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As LongPrivate Const HKEY_LOCAL_MACHINE = &H80000002
    Private Const REG_SZ = 1                         ' Unicode nul terminated stringPrivate Sub Command1_Click()
        Dim s As String * 20
        Dim ret As Long
        Dim Num As String
        Dim lens As Long
        
        ret = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\bailang", ret3)
        
        If ret = 0 Then
            RegSetValue HKEY_LOCAL_MACHINE, "SOFTWARE\bailang", REG_SZ, 20, lens
            RegQueryValue HKEY_LOCAL_MACHINE, "SOFTWARE\bailang", s, 20
        End If
        
        Debug.Print s
    End Sub
      

  2.   

    Private Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As LonglpValue是保存返回的值,而lpcbValue是指定lpValue字符串的长度,如果lpValue没有足够的长度,lpcbValue就会返回注册表值需要的最小长度(在你的范例中是3)。所以你设定一个一定长度的字符串并且将lpcbValue 设置为字符串的长度就可以了。
      

  3.   

    要是我想随意获取值呢,最好还是改改吧Private Sub Command1_Click()
        Dim s As String
        Dim ret As Long
        Dim Num As String
        Dim lens As Long
        Dim ret3 As Long
        ret = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\bailang", ret3)
        
        If ret = 0 Then
            RegSetValue HKEY_LOCAL_MACHINE, "SOFTWARE\bailang", REG_SZ, 20, 2
            RegQueryValue HKEY_LOCAL_MACHINE, "SOFTWARE\bailang", ByVal vbNull, lens
            s = Space(lens - 1)
            RegQueryValue HKEY_LOCAL_MACHINE, "SOFTWARE\bailang", s, lens
        End If
        
        Debug.Print s
    End Sub