使用WINSOCK控件通讯,可否使用自定义类型数据包?
vb6.0
win95
两台机子使用WINSOCK控件通讯,不知可否使用自定义类型数据包?如果可以该怎样做? 我欲使用WINSOCK控件接发自定义类型的数据,如
Type sendpack
Flag As Byte
connum As String
weight1 As long
weight2 as long
End Type
将上述定义放在MODULES中或使用WINSOCK的窗体中,定义STR1 为以上类型,使用
Winsock1.senddata str1
结果都出错,提示:
“只有在公共对象模块中定义的公共用户定义类型可以被使用为类模块公共过程的参数或返回类型、或作为公共用户定义类型的字段
这个错误的原因与解决方法如下:
试图使用一个公共用户定义类型作为类模块公共过程的参数或返回类型、或作为公共用户定义类型的字段。只有在公共对象模块中定义的公共用户定义类型才可以这样使用。”
虽有如上提示,可是我并不十分明白,也不知如何解决,请指教,万分感谢!
回答:
SendData只处理字符串和字节数组,所以其他类型应该转换为这两种类型。对于自定义类型只能转换为字节数组。可以利用CopyMemory函数:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
先定义一个字节数组:
Dim b() As Byte, Str1 As sendpack
发送时:
ReDim B(Len(Str1)) As Byte
CopyMemory B(0), Str1, Len(Str1)
Winsock1.SendData B
接收时:
ReDim B(Len(Str1)) As Byte
Winsock1.GetData B
CopyMemory Str1, B(0), Len(Str1)
可是,我用這個的時候,自定義的第一個數據丟失叻```如何解決.呼叫版主``
就是那個flag```