Salut tout le monde,
Tout est dans le titre,
je voudrais pouvoir copier une structure dans une autre, comment dois-je faire ?
Merci d'avance
Salut tout le monde,
Tout est dans le titre,
je voudrais pouvoir copier une structure dans une autre, comment dois-je faire ?
Merci d'avance
moi j'utilise cette méthode c'est la bonne?
CopyMemory(@ModuleReel,@ModuleTheorique,sizeof(ModuleTheorique));
Il semblerait que non , en faisant comme ça mes deux Records sont a la meme adresse, j'ai l'impression
Euh vu le peu d'informations je dirais
Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 var MaStructure1,MaStructure2 : TMaStructure; begin // On considère que MaStructure1 à les données MaStructure2 := MaStruture1; end;
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
normalement non, ils ne sont pas a la meme adresse
NB : bout de code qui ne sert a rien etant donné qu'on peut directement affecter un record a un autre, mais peut etre pratique si les 2 records font la meme taille mais sont de type different
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 var p1, p2: TPoint; begin p1 := Point(1,2); p2 := Point(3,4); CopyMemory(@P1, @P2, SizeOf(TPoint)); //ici, P1 = P2 = (3,4) P1.X := 5; //P2.X vaut tjrs 3
j'utilise 'move'. FAIRE ATTENTION AU TAILLES ET AU CHEVAUCHEMENTS ENTRE SOURCE ET DESTINATION !!!!!
Help delphi(7) à propos de move:
Copie des octets de la source vers la destination.
Unité : System
Catégorie : routines diverses
Syntaxe Delphi : procedure Move(const Source; var Dest; Count: Integer);
Description
Move copie Count octets de Source vers Dest. Aucune vérification d'étendue n'est effectuée. Move effectue une compensation en fonction du chevauchement entre les blocs source et destination.
Dans la mesure du possible, utilisez la fonction globale SizeOf pour effectuer le comptage.
pour le moment j ai fais une procédue qui copie item par item, mais je vais essayer le move pour voir si cela fonctionne.
Merci a tous
Salut,
à titre d'info, dans l'unité Windows :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD); begin Move(Source^, Destination^, Length); end;
Peux-tu expliquer ce qui t'empêche de faire une copie par affectation de la structure à une autre ? Comme l'a montré Rayek.
C'est ça la bonne méthode à utiliser. Pas de Move ou autre chose de ce genre ici. Car un Move ne prend pas en compte les données qui requièrent une initialisation (chaînes, tableaux dynamiques, interfaces, variants, tableaux ou record avec récursivement des données qui requièrent une initialisation).
sjrd, ancien rédacteur/modérateur Delphi.
Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
Découvrez Mes tutoriels.
Un peu d'histoire!
Cela fonctionne maintenant car quel que soit le mode de la directive $A, les variables et constantes typées sont toujours alignées pour un accès optimal soit {$A8}, l'exécution est plus rapide. Cela n'a pas toujours été le cas : pour d'anciennes versions de turbo pascal ( et peut-être meme delphi 1 ou 2) j'ai rencontré des situations avec x1 : XXX x2 : XXX dans 2 units compilés en $a+ et $a- avec comme conséquence sizeof(x1) <> sizeof(x2).
D'ailleurs cela ne change pas fondamentalement la réponse car alors les move étaient à manipuler qu'avec beaucoup de soins.
Partager