Remplacement de copymemory

popeye63 Messages postés 6 Date d'inscription lundi 12 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009 - 14 janv. 2009 à 14:38
 Utilisateur anonyme - 15 janv. 2009 à 11:01
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

popeye63 Messages postés 6 Date d'inscription lundi 12 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009
14 janv. 2009 à 14:44
Public



Declare



Sub
CopyMemory

Lib



"kernel32"



Alias



"RtlMoveMemory"
(

ByVal
Destination

As



Object
,

ByVal
Source

As
C_Struc.STRUCTURE1,

ByVal
Length

As



Long
)





Pop
0
Utilisateur anonyme
14 janv. 2009 à 23:59
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 janv. 2009 à 01:40
pas mal kenji! bon à savoir
codyx t'attend si tu as le temps, çà peut être utile
0
Utilisateur anonyme
15 janv. 2009 à 10:37
C'est fait  en vb et c# :
http://www.codyx.org/snippet_structure-vers-tableau-byte_760.aspx

__________
  Kenji
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
popeye63 Messages postés 6 Date d'inscription lundi 12 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009
15 janv. 2009 à 10:45
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
0
Utilisateur anonyme
15 janv. 2009 à 11:01
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
0
Rejoignez-nous