Salut
Oui, cela fonctionnera à condition que les variables utilisées dans ton type soient de longueur définie par le type.
String, par exemple, ne pourrait pas fonctionner.
Je te dis ça car on ne connait pas la définition de ty_Header, ton premier 'paramètre'.
Pour transformer un Long en un tableau de Byte ... et reciproquement :
Déclarations :
Option Explicit
Private Type InputStructure
monLong1 As Long ' 4 octets/bytes
monByte1 As Byte ' 1 octets/bytes
monLong2 As Long ' 4 octets/bytes
End Type
Private oInputDatas As InputStructure
Private aOutputBytes() As Byte
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" ( _
pDst As Any, _
pSrc As Any, _
ByVal ByteLen As Long)
Structure -> tableau de bytes :
With oInputDatas
.monLong1 = &H499602D2 ' 1234567890 en décimal
.monByte1 = &H6F ' 111 en décimal
.monLong2 = &H42E576F7 ' 1122334455 en décimal
End With
' Prépare un tableau de même longueur (qui commence à l'index 0)
ReDim aOutputBytes(LenB(oInputDatas) - 1)
' Transfert des données
Call CopyMemory(aOutputBytes(0), _
ByVal VarPtr(oInputDatas), _
LenB(oInputDatas))
Tableau de Bytes -> Structure :
If UBound(aOutputBytes) <= 0 Then Exit Sub
Dim oRecup As InputStructure
' Transfert des données
Call CopyMemory(oRecup, _
ByVal VarPtr(aOutputBytes(0)), _
UBound(aOutputBytes) + 1)
' Vérif
With oRecup
Debug.Print "Premier Long", .monLong1
Debug.Print "Premier Byte", .monByte1
Debug.Print "Second Long", .monLong2
End With
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)