Copier une structure en memoire

sylezolez Messages postés 12 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 9 mai 2005 - 16 avril 2005 à 16:48
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 16 avril 2005 à 23:28
Quelqu un aurait il la connaissance d une fonction pouvant copier une structure de 156 octets a une certaine adresse donnée
Merci

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 avril 2005 à 17:07
Salut
Pour faire ça (sorte de Peek-Poke des anciens langages), il faut utiliser les APIs comme CopyMemory.
Va charger 'api guide' sur www.allapi.net pour regarder l'exemple de code fournit avec cette api, c'est ce qu'il te faut.

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)
0
sylezolez Messages postés 12 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 9 mai 2005
16 avril 2005 à 17:37
Merci pour le lien, très pratique.
Le probleme avec CopyMemory, si j ai bien compris,c est que la taille maximale de la variable a copier est de 16 octets or la mienne est de 156 octets. Je vais chercher, peut etre que je peut trouver autre chose
Salut
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 avril 2005 à 18:17
RtlCopyMemory(addrDest, AddrSrc, sizeSrc)
sizeSrc n'a aucune limite définie, à toi de passer le nbr d'octets correct à copier.

ciao...
BruNews, MVP VC++
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
16 avril 2005 à 19:40
Tu peut déclarer la fonction CopyMemory avec l'argument Src en ByRef ... as Any, et
tu lui passe directement ta structure, le troisieme argument contient
la taille en octet. Il faut faire gaffe d'avoir la même taille mémoire
pour l'argument Dest ou un ByVal Long contenant une adresse déja allouée de la bonne taille( avec l'api GlobalAlloc par exemple ) sinon c'est plantage complet (plantage de VB en débugage).

Flachy Joe
0

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

Posez votre question
sylezolez Messages postés 12 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 9 mai 2005
16 avril 2005 à 22:38
Le probleme c est que ça marche bien quand ma structure est composée uniquement de champ de même type mais quand je combine des long avec des string, je ne récupère pas tout dans ma copie.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
16 avril 2005 à 23:28
normal il y a un cadrage sur 4.

Private Type Struct
nom As String * 3
num As Long
End Type


Private Sub Form_Load()
Dim maStruct As Struct
MsgBox LenB(maStruct) ' = 3*2 + 2 + 4
End Sub

Daniel
0
Rejoignez-nous