本帖最后由 jiftlixu 于 2010-03-06 13:56:40 编辑

解决方案 »

  1.   

    http://topic.csdn.net/u/20100305/10/2398150e-ae14-4456-93a8-6abeee6d2b96.html http://blog.csdn.net/jiftlixu/archive/2010/03/06/5351741.aspx 据说vb6中,字 符串以以UNICODE方式存储,所以view plaincopy to clipboardprint?
    Private Type UDT   
        lngM1 As Long  
        lngM2 As Long  
        strM3 As String * 18   
        strM4 As String * 8   
        lngM5 As Long  
    End Type   
      
      
    Private Sub Command4_Click()   
           Dim tmp As UDT   
        With tmp   
            .lngM1 = 1   
            .lngM2 = 2   
           ' .strM3 = "一二三四五六七八九十一二三四五六七八"   
             .strM3 = "一二三四五六七八九"  
          '  .strM3 = "ABCD"   
            .strM4 = "测试ABC"  
            .lngM5 = 5   
        End With  
           
        Dim bytBuf() As Byte  
        ReDim bytBuf(Len(tmp) - 1)   
      
        CopyMemory bytBuf(0), tmp, Len(tmp)   
           
        Winsock1.SendData bytBuf   
      
      
    End Sub  
    Private Type UDT
        lngM1 As Long
        lngM2 As Long
        strM3 As String * 18
        strM4 As String * 8
        lngM5 As Long
    End Type
    Private Sub Command4_Click()
           Dim tmp As UDT
        With tmp
            .lngM1 = 1
            .lngM2 = 2
           ' .strM3 = "一二三四五六七八九十一二三四五六七八"
             .strM3 = "一二三四五六七八九"
          '  .strM3 = "ABCD"
            .strM4 = "测试ABC"
            .lngM5 = 5
        End With
        
        Dim bytBuf() As Byte
        ReDim bytBuf(Len(tmp) - 1)    CopyMemory bytBuf(0), tmp, Len(tmp)
        
        Winsock1.SendData bytBuf
    End Sub
     vc6中定义相对应的结构体:view plaincopy to clipboardprint?
    typedef struct{   
        long lM1;   
        long lM2;   
        char szM3[18];   
        char szM4[8];   
        long lM5;   
    }UDT;   
      
    //(省略部分代码)   
        char recvBuf[128];     
        UDT t;   
        while(true)     
        {     
                      memset(&t,0,sizeof(t));   
            memset(recvBuf,0,sizeof(recvBuf));   
            //接收数据     
       int recvlen=recvfrom(svr,recvBuf,128,0,(sockaddr*)&addrClient,&len);    
        ::CopyMemory(&t,recvBuf,128);   
        }   
    //。  
      

  2.   

    CopyMemory bytBuf(0), tmp, Len(tmp) 
    这句错了吧 什么意思
     将结构体赋值到 bytbuf ?
      

  3.   

    char szM3[18];指
    换试试
    BSTR pStr;
      

  4.   

    注意,我用的是定长string
    string*10
      

  5.   

    code=VB]
    '再提出个问题:
     '    谁可以解释下定长和变长字符串在内存中,存储的区别???(回答好,也给分)
    [/code]
      

  6.   

    strM3 As String * 18
    这是 18 个 Unicode 字符,占 36 个字节。
    char szM3[18];
    这是 18 个 Ansi 字符,只占 18 个字节。两边的结构根本没匹配。
      

  7.   

    还有你的 WinSock 要用二进制方式进行传递,这样才能保证数据不变。
      

  8.   


    如果采用,char szM3[36];
    其后的,数据就不能正确接收。
    WinSock就是采用二进制方式进行传递的。