同上
结构: type aa
           x as long
           y as long 
           xy as string
      end type
数组: a( 1 to 5) as integer
       b( 1 to 5) as string *10
谢谢

解决方案 »

  1.   

    用copymemory复制到byte数组里再传.
    接收端再copymemory到结构里.
      

  2.   

    我用WINSOCK的UDP发的数组  是不是因为Safearray?  具体怎么做呢Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Dim a(1 To 5) As Long
    Private Sub Command1_Click()
    For i = 1 To 5
        a(i) = 5
    Next
    Dim b() As Byte
    ReDim b(1 To 20) As Byte
    CopyMemory ByVal VarPtr(b(1)), ByVal VarPtr(a(1)), 20
    Winsock1.SendData b
    End SubPrivate Sub Form_Load()
    Winsock1.Bind 1000
    Winsock1.RemotePort = 2000
    Winsock2.Bind 2000
    Winsock2.RemotePort = 1000
    End SubPrivate Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
    Dim t As Variant
    Dim c() As Byte
    ReDim c(1 To bytesTotal) As Byte
    Winsock2.GetData c
    'c = t
    Dim d(1 To 5) As Long
    CopyMemory ByVal VarPtr(d(1)), ByVal VarPtr(c(1)), bytesTotal
    For i = 1 To 5
        Debug.Print d(i)
    Next
    End Sub
      

  3.   

    这句
    CopyMemory ByVal VarPtr(d(1)), ByVal VarPtr(c(1)), bytesTotal
    改成
    CopyMemory ByVal VarPtr(d(1)), ByVal VarPtr(c(0)), bytesTotal原因是
    Winsock2.GetData c
    之后会c重新定义为最小索引为0的数组,而不是你上面定义的从1开始
      

  4.   

    超级绿豆  
    1、昨天我按你说的做了是可以的  但为什么数组下限不能从1开始呢?
    2、我把数组改成定长字符串为什么不行呢(我知道可以直接传字符串的 但我想用指针试试)
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Long, Source As Long, ByVal Length As Long)
    Private Sub Command1_Click()
    Dim a(1 To 3) As String * 3
    a(1) = "abc"
    a(2) = "d"
    a(3) = "efg"
    Dim b(0 To 8) As Byte
    CopyMemory ByVal VarPtr(b(0)), ByVal VarPtr(a(1)), 9    是不是用StrPtr???
    Winsock1.SendData bEnd SubPrivate Sub Form_Load()
    Winsock1.Bind 1000
    Winsock1.RemotePort = 2000
    Winsock2.Bind 2000
    Winsock2.RemotePort = 1000
    Winsock1.RemoteHost = "127.0.0.1"
    Winsock2.RemoteHost = "127.0.0.1"
    End SubPrivate Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
    MsgBox bytesTotal
    Dim c() As Byte
    ReDim c(0 To bytesTotal - 1) As Byte
    Winsock2.GetData c
    Dim d(1 To 3) As String * 3
    CopyMemory ByVal VarPtr(d(1)), ByVal VarPtr(c(0)), bytesTotal
    For i = 1 To 3
        Debug.Print d(i)         '都是空格
    Next
    End Sub
    请老大指教  谢谢