 |
操作系统: windows98
编程工具: vb6.0
问题: 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 Sub Form_Load()
Dim S As String
S = Space(lenS)
RegQueryValue &H80000000, ".txt", S, lenS
MsgBox S
RegQueryValue &H80000000, ".txt", S, lenS
MsgBox S
End Sub
---------------------------------
为何两次msgbox s得到的答案不同?
水平: 刚入门(rooboonic)
|
| |
|
 |
主要的问题是你没有给lenS赋初值。默认的初值为0。RegQueryValue的第4个参数表示你的缓冲区的大小,如果你的缓冲区大小比实际的内容短,RegQueryValue会把实际的长度传送给lenS变量。当你第2次调用RegQueryValue时,由于lenS不再为0,RegQueryValue就会把数据传送到S变量中。但是如果你的lenS的初值真是0,S = Space(lenS)将使S变成一个空串,这样做是危险的。因为第2次调用RegQueryValue时,由于S变量的空间不够大,可能导致错误,即使显示了结果也可能是错误的。
应该这样修改你的程序:
Private Sub Form_Load()
Dim S As String
S = Space(lenS)
lenS = 200
RegQueryValue &H80000000, ".txt", S, lenS
MsgBox S
lenS = 200 ' 建议每次调用RegQueryValue之前都这样做,以避免前一个调用影响后一个调用
RegQueryValue &H80000000, ".txt", S, lenS
MsgBox S
End Sub
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, Windows API, win32, api, windows api, gdi32, kernel。
|
| |
|
| |
|
| |
|
|