Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameW" (ByVal lpBuffer As String, nSize As Long) As Long
Private Sub Command2_Click()
Dim str As String * 255
GetComputerName str, 255
StrConv str, vbFromUnicode
能正确显示End Sub
Private Sub Command2_Click()
Dim str As String * 255
GetComputerName str, 255
StrConv str, vbFromUnicode
能正确显示End Sub
比如这样用,就可以“正确获取数据”:
Option ExplicitPrivate Declare Function GetComputerName Lib "kernel32" _
Alias "GetComputerNameW" ( _
ByVal lpBuffer As Long, _
ByRef nSize As Long) As LongPrivate Sub Command1_Click()
Dim strTemp As String
Dim w As Long
w = 255& ' 缓冲区长度
strTemp = String$(w, vbNullChar)
Call GetComputerName(StrPtr(strTemp), w)
Me.Caption = Left$(strTemp, w)
End Sub
但在“函数返回”后,VB6把它当成ANSI格式编码又“悄悄的”再给你“转换成Unicode编码”,
所以你必须又要“从Unicode编码转换回来”才能正确显示。结果:本来“根本不需要进行字符串编码转换”的,在你的代码中却偏偏进行了3次转换…………