Salut à tous, tout en dans le titre, j'aimerai savoir comment convertir un object ou une classe personnaliser en un tableau de byte et après pouvoir reconvertir mon tableau en object. Si quelqu'un peut m'aider![]()
Salut à tous, tout en dans le titre, j'aimerai savoir comment convertir un object ou une classe personnaliser en un tableau de byte et après pouvoir reconvertir mon tableau en object. Si quelqu'un peut m'aider![]()
runtime.interrop.marshal peut etre
merci pour la réponse, j'ai été voir quelque tuto et j'ai fait sa
le truc c'est que ma structure mteste2 est vide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Public Structure teste Public nom As String Public prenom As String End Structure Sub Main() Dim ptr As IntPtr Dim MTeste As teste Dim Mbyte() As Byte MTeste.nom = "nom" MTeste.prenom = "prenom" ' on converti MTeste en tableau de byte dans Mbyte ptr = Marshal.AllocCoTaskMem(Marshal.SizeOf(MTeste)) ReDim Mbyte(Marshal.SizeOf(MTeste) - 1) Marshal.Copy(ptr, Mbyte, 0, Marshal.SizeOf(MTeste)) Dim mteste2 As teste ' on converti Mbyte en structure teste dans mteste2 Dim MyGC As GCHandle = GCHandle.Alloc(Mbyte, GCHandleType.Pinned) mteste2 = CType(Marshal.PtrToStructure(MyGC.AddrOfPinnedObject, GetType(teste)), teste) MyGC.Free() Console.WriteLine(mteste2.prenom) Console.ReadKey() End Subou du moin rien n'apparait dans la console, je comprend pas trop pourquoi merci de m'aider
je ne connais pas trop le marsahling, mais à vu de nez du demande juste un espace mémoire de la taille de l'espace mémoire de ta variable, il faut aussi trouver où est l'emplacement mémoire de départ de ta variable à copier
Moi je chercherais plutôt du coté de la sérialisation.
Je pense qu'avant d'être un XML ça doit bien passer par un flux (Stream) que l'on peut, je pense, facilement convertir en tableau de byte.
Ce n'est qu'une piste, je n'ai rien testé...
@+
j'ai trouver un code de serialisation en byte() et sa marche bien, mais le seul problème c'est quand je désérialise sur une autre aplication, il ne veux pas charger car elle n'a pas le meme nom d'assemblycomment on fait pour virer le header lors de la sérialisation?
voila le code pour ceux que sa intéresse:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 'Convert an object to a byte array Private Function ObjectToByteArray(ByVal obj As Object) As Byte() If obj Is Nothing Then Return Nothing End If Dim bf As BinaryFormatter = New BinaryFormatter Dim ms As MemoryStream = New MemoryStream bf.Serialize(ms, obj) Return ms.ToArray End Function ' Convert a byte array to an Object Private Function ByteArrayToObject(ByVal arrBytes As Byte()) As Object Dim memStream As MemoryStream = New MemoryStream Dim binForm As BinaryFormatter = New BinaryFormatter memStream.Write(arrBytes, 0, arrBytes.Length) memStream.Seek(0, SeekOrigin.Begin) Dim obj As Object = CType(binForm.Deserialize(memStream), Object) Return obj End Function
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager