如题。如何取首地址,保存在一个数组中。当返回首地址是01时,text里面显示仪表1,当返回首地址是02时,显示仪表2…………类推
谢谢高人指教!!!

解决方案 »

  1.   

    采用king06意见,用varptrarray,不知道怎么用,出错了~~
    帮我看下:
     Dim first_address() As Byte
              Do
              Delay_Time 400                 '等待400ms
              buf = MSComm.Input
              first_address() = VarPtrArray(buf)
              i = 1
              If Len(buf) >= 24 Then
                 If first_address() = i Then
                    Combo_Meter.AddItem "仪表" & i
                 End If
                    i = i + 1
                    Exit Do
              End If
          Loop Until GetTickCount() - tt > 2000
      

  2.   

    刚把定义给改了
    Dim first_address() as long
      

  3.   

    可以用VarPtr变量地址
    Private Sub Form_Load()
       Dim a() As Byte
        a = StrConv("abcd", vbFromUnicode)
        Dim b As Long
        b = VarPtr(a(0))'b是a数组首地址
        
    End Sub
      

  4.   

    哎,我只能说,问题解决了~~呵呵
    Private Sub Command_BUTTON_Scan_Click()
        
        On Error GoTo error
        
        Dim i As Integer
        Dim tt As Double
        Dim buf$
        Dim ACK As Byte
        
        Dim count As Integer
        Dim send(7) As Byte         '定义发送数组
        Dim crc(2) As Byte
        Dim first_address(0 To 29) As Long   '定义仪表首地址数组
        
            first_address(0) = &H1
            first_address(1) = &H2
            first_address(2) = &H3
            first_address(3) = &H4
            first_address(4) = &H5
            first_address(5) = &H6
            first_address(6) = &H7
            first_address(7) = &H8
            first_address(8) = &H9
            first_address(9) = &HA
            first_address(10) = &HB
            first_address(11) = &HC
            first_address(12) = &HD
            first_address(13) = &HE
            first_address(14) = &HF
            first_address(15) = &H10
            first_address(16) = &H11
            first_address(17) = &H12
            first_address(18) = &H13
            first_address(19) = &H14
            first_address(20) = &H15
            first_address(21) = &H16
            first_address(22) = &H17
            first_address(23) = &H18
            first_address(24) = &H19
            first_address(25) = &H1A
            first_address(26) = &H1B
            first_address(27) = &H1C
            first_address(28) = &H1D
            first_address(29) = &H1E
        
        Combo_Meter.Clear
        Combo_Meter.AddItem "请选择仪表"
        
        If scanaddP < 31 Then
            send(0) = scanaddP
            scanaddP = scanaddP + 1
            Else: scanaddP = 0
        End If
        
          send(1) = &H3
          send(2) = &H0
          send(3) = &H0
          send(4) = &H0
          send(5) = &HA
          Call CRC16(send(), 5, crc())
          send(6) = crc(1)
          send(7) = crc(0)
        
          MSComm.Output = send
          tt = GetTickCount()             '用来超时控制,意思是请求时间上传的命令帧发送过去之后,超时控制时间2000ms内,就应该得到返回消息
          Do
              Delay_Time 400                 '等待400ms
              buf = MSComm.Input
              first_address(i) = VarPtr(buf)
              i = 1
              If Len(buf) >= 24 Then
                 If first_address(i) = i Then
                    Combo_Meter.AddItem "仪表" & i
                 End If
                    i = i + 1
                    Exit Do
              End If
          Loop Until GetTickCount() - tt > 2000
          
          If Len(buf) = 0 Then               '无上传信息,一般出现这种情况为物理连接断开,或帧传送失败。
              Exit Sub
          End Iferror:     If Err.Number = 8005 Then
                MsgBox "端口已经打开", vbDefaultButton1 + 16, "提示信息"
             Exit Sub
             Else
                MsgBox "错误信息为" & Err.Description, vbDefaultButton1 + 48, "提示信息"
           End If
    End Sub
      

  5.   

    VarPtrArray是个api,要声明的.
      Dim   lngSafeArrayAddress   as   Long   
      Dim   lngArrayOfLongs(9)   as   Long   
      lngSafeArrayAddress   =   VarPtrArray(lngArrayOfLongs()) 也可以用楼上的方法去取数组内第一个元素的地址.
    不过这个元素的地址是否就是数组本身的首地址有待考证.