大家好,以下是一道高新技术考试,单击按钮,取得本地计算机名的程序,考试在即,大家可以帮我解释下吗?
Private Sub Command1_Click()
  Dim Name As String, Length As Long
  Length = 255
  Name = String(Length, 0) '这语句是什么意思?
  ZYJMod1.GetComputerName Name, Length
  Name = Left(Name, Length) '这语句是什么意思?
  Label1.Caption = Name
End Sub 
------
急复,谢谢!

解决方案 »

  1.   

    第一句是填充Length长度的空字符。用于分配空间,因为要调用API。API是用C写的,用的是指针第二句是截取Length长度的字符,以为返回的是指针,所以长度是不固定的
      

  2.   

    Public Const ERROR_SUCCESS As Long = 0Public Const MAX_DOMAIN_NAME_LEN As Long = 128Public Const MAX_HOSTNAME_LEN As Long = 128Public Const MAX_SCOPE_ID_LEN As Long = 256Public Type IP_ADDRESS_STRING
        IpAddr(0 To 15) As Byte
    End TypePublic Type IP_MASK_STRING
        IpMask(0 To 15) As Byte
    End TypePublic Type IP_ADDR_STRING
        dwNext As Long
        IpAddress As IP_ADDRESS_STRING
        IpMask As IP_MASK_STRING
        dwContext As Long
    End TypePublic Type FIXED_INFO
        HostName(0 To (MAX_HOSTNAME_LEN + 3)) As Byte
        DomainName(0 To (MAX_DOMAIN_NAME_LEN + 3)) As Byte
        CurrentDnsServer As IP_ADDR_STRING
        DnsServerList As IP_ADDR_STRING
        NodeType As Long
        ScopeId(0 To (MAX_SCOPE_ID_LEN + 3)) As Byte
        EnableRouting As Long
        EnableProxy As Long
        EnableDns As Long
    End TypePublic Declare Function GetNetworkParams Lib "iphlpapi.dll" _
    (pFixedInfo As Any, pOutBufLen As Long) As LongPublic Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Public szDomainName As StringPrivate Function GetHostName() As String
    Dim buff() As Byte
    Dim cbRequired As Long
    Dim nStructSize As Long
    Dim Info As FIXED_INFOCall GetNetworkParams(ByVal 0&, cbRequired)
    If cbRequired > 0 Then
        ReDim buff(0 To cbRequired - 1) As Byte
        If GetNetworkParams(buff(0), cbRequired) = ERROR_SUCCESS Then
            CopyMemory Info, ByVal VarPtr(buff(0)), LenB(Info)
            GetHostName = TrimNULL(StrConv(Info.HostName, vbUnicode))
            szDomainName = TrimNULL(StrConv(Info.DomainName, vbUnicode))
            
                   
        End If
    End If
    End FunctionPrivate Function TrimNULL(item As String)
        Dim pos As Integer
        pos = InStr(item, Chr$(0))
        If pos Then
            TrimNULL = Left$(item, pos - 1)
        Else
            TrimNULL = item
        End If
    End FunctionPrivate Sub Command1_Click()
    Text1.Text = GetHostName()
    Text2.Text = szDomainName
    End Sub