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;
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);
}
//。
这句错了吧 什么意思
将结构体赋值到 bytbuf ?
换试试
BSTR pStr;
string*10
'再提出个问题:
' 谁可以解释下定长和变长字符串在内存中,存储的区别???(回答好,也给分)
[/code]
这是 18 个 Unicode 字符,占 36 个字节。
char szM3[18];
这是 18 个 Ansi 字符,只占 18 个字节。两边的结构根本没匹配。
如果采用,char szM3[36];
其后的,数据就不能正确接收。
WinSock就是采用二进制方式进行传递的。