Hej, Det går inte att skicka datatyper på det sättet. Exempel på hur du kan göra:Datatypen Variant
Mitt problem är alltså datatypen variant... mitt problem är att jag vill skicka en egen datatyp som innehåller en Integer och en Sträng över en Winsock-anslutning... är detta möjligt? Funktionen "X.SendData" stödjer ju datatypen variant och min connection är det inget fel på. Har försökt att lägga den egna dataypen i en variablen av typen variant, men det går alltså inte... datatypen variant ska väl kunna lagra egna skapade datatyper?
Min egna datatyp ser ut enligt nedan:
<code>
Public Type messageType
type_of_message As Integer
message As String
End Type
<code> Sv: Datatypen Variant
Du kan använd api för att kopiera minne till en bytearrya Skicka den. Sendan kopiera det tillbaks till datatypen.Sv: Datatypen Variant
<code>
'Module: Modul1
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Type Message
MessageType As Integer
MessageBody As String
End Type
Public Function MessageToByte(Message As Message) As Byte()
Dim Data() As Byte
Dim TextLength As Long
TextLength = Len(Message.MessageBody)
If TextLength < 2147483647 Then
ReDim Data(0 To 5 + TextLength)
CopyMemory Data(0), Message.MessageType, 2
CopyMemory Data(2), TextLength, 4
CopyMemory Data(6), ByVal Message.MessageBody, TextLength
MessageToByte = Data
End If
End Function
Public Function ByteToMessage(Data() As Byte) As Message
Dim TextLength As Long
CopyMemory ByteToMessage.MessageType, Data(0), 2
CopyMemory TextLength, Data(2), 4
ByteToMessage.MessageBody = Space(TextLength)
CopyMemory ByVal ByteToMessage.MessageBody, Data(6), TextLength
End Function
'Form: Form1
Option Explicit
Private Function NewMessage(MessageType As Integer, MessageBody As String) As Message
NewMessage.MessageType = MessageType
NewMessage.MessageBody = MessageBody
End Function
Private Sub Command1_Click()
Dim Data() As Byte
Dim Temp As Message
Data = MessageToByte(NewMessage(1, "Test"))
Temp = ByteToMessage(Data)
Debug.Print "Type: " & Temp.MessageType
Debug.Print "Body: " & Temp.MessageBody
End Sub
</code>