Remplacement de copymemory

Signaler
Messages postés
6
Date d'inscription
lundi 12 janvier 2004
Statut
Membre
Dernière intervention
15 janvier 2009
-
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
-
Bonjour,
je recherche une solution pour utiliser copymemory voici mon code :

j'ai une structure du type qui se situe dans la classe C_Struc
Public

Structure ST1

   Public Int1
As
Integer

   Public long1
As
Long

   Public long2
As
Long

End
Structure

je souhaite réaliser un copymemory de cette structure pour cela je fait :

Dim tab_Byte()
As
Byte

Dim St1
As C_Struc.ST1'je renseigne ma structure
St1.Int1 = 14

St1.long1 = -140

St1.long2 = -33

ReDim tab_Byte(9)

'et je réalise la copy
CopyMemory(tab_Byte(0), St1, 10)

Je ne retrouve pas mes éléments de ma structure sous tab_byte!!!!???
Help Me.

Merci

Pop

6 réponses

Messages postés
6
Date d'inscription
lundi 12 janvier 2004
Statut
Membre
Dernière intervention
15 janvier 2009

Public



Declare



Sub
CopyMemory

Lib



"kernel32"



Alias



"RtlMoveMemory"
(

ByVal
Destination

As



Object
,

ByVal
Source

As
C_Struc.STRUCTURE1,

ByVal
Length

As



Long
)





Pop
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
32
Salut,

Avec les outils du framework :
'Imports System
'Imports System.Runtime.InteropServices

Private Function StructToByteArray(ByVal Struct As Object) As Byte()
  Dim StructSize As Integer = Marshal.SizeOf(Struct)
  Dim StructPrt As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(Struct))
  Dim StructBytes() As Byte = CType(Array.CreateInstance(GetType(Byte), StructSize), Byte())
  Marshal.StructureToPtr(Struct, StructPrt, False)
  Marshal.Copy(StructPrt, StructBytes, 0, StructSize)
  Marshal.FreeHGlobal(StructPrt)
  Return StructBytes
End Function
<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->
Coloration syntaxique vb/vba/vb.net

__________
  Kenji
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
pas mal kenji! bon à savoir
codyx t'attend si tu as le temps, çà peut être utile
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
32
C'est fait  en vb et c# :
http://www.codyx.org/snippet_structure-vers-tableau-byte_760.aspx

__________
  Kenji
Messages postés
6
Date d'inscription
lundi 12 janvier 2004
Statut
Membre
Dernière intervention
15 janvier 2009

Ouaip merci pour ton aide....
J'ai écris la fonction inverse pour ceux que ca interesse à savoir passer d'un tableau de byte en une structure...
Public

Function ByteArrayToStruct(
ByVal tableauByte()
As
Byte,
ByVal StrucTType
As Type,
ByVal size
As
Integer)
As
Object

Dim p
As IntPtr = Marshal.AllocHGlobal(size)

Dim Result
As
ObjectMarshal.Copy(tableauByte, 0, p, size)

Result = Marshal.PtrToStructure(p, StrucTType)

Marshal.FreeHGlobal(p)

Return Result

End
Function

Pop
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
32
J'aurais plutôt fait ainsi :

Private Function ByteArrayToStruct(Of T)(ByVal StructSrc() As Byte) As T
  Dim StructSize As Integer = Marshal.SizeOf(GetType(T))
  Dim StructPrt As IntPtr = Marshal.AllocHGlobal(StructSize)
  Dim Struct As T
  Marshal.Copy(StructSrc, 0, StructPrt, StructSize)
  Struct = CType(Marshal.PtrToStructure(StructPrt, GetType(T)), T)
  Marshal.FreeHGlobal(StructPrt)
  Return Struct
End Function
<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->
Coloration syntaxique vb/vba/vb.net

__________
  Kenji