je suis sous W10 avec Delphi 6 PE.
J'essaie d'utiliser un TLIst comme index dynamique poyr des enregsirements dans un fichier binaire.
L'accès au fichier binaire fonctionne bien.
J'ai créé un objet constituant un éément de mon index, composé de deux entités:
- une clé binaire représentée dans ARRAY OF BYTE dynamique
- un index dans mon fichier, contenu dans un INTEGER.
Ma clé binaire est composée d'une partie texte avec une longueur fixe de 20 caractures (paramétrée par une constante) et une partie binaire représentée par une valeur integer pour la démo. Ma clé est donc de 24 caractères.
Mon objet contenant la clé est défini comme suit:
Je peux créer cet objet le le charger avec mes valeurs sans problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 type pTIndexElement = ^TIndexElement; TIndexElement = class Key: array of byte; private fIndex: integer; published constructor CreateNew(aSize: integer); destructor Destroy; override; property Index: integer read fIndex write fIndex; end;
Mais ensuite, il faut l'ajouter à un TLIST et j'ai toujours une violation de mémoire.
Je fais comme ceci:
Quelque soit la syntaxe de la méthode ADD parmi les 3 essayés, j'ai toujours une violation de mémoire.
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 var IDX: TList; ... procedure TForm1.Button2Click(Sender: TObject); var IE: TIndexElement; s: string; pb: pByte; kint, ind: integer; p: Pointer; begin IE := TIndexElement.CreateNew(TextKeyLength+BinaryKeyLength); s := LeftStr(Edit1.Text+StringOfChar(' ',TextKeyLength),TextKeyLength); kint := SpinEdit1.Value; ind := SpinEdit2.Value; pb := pByte(@IE.Key[0]); showmessage('a1'); Move(s,pb^,TextKeyLength); showmessage('a2'); inc(pb,TextKeyLength); Move(kint,pb^,BinaryKeyLength); showmessage('a3'); IE.Index := ind; showmessage('a4'); IDX.Add(IE); // violation de mémoire IDX.Add(@IE); // violation de mémoire IDX.Add(Pointer(IE)); // violation de mémoire showmessage('a5'); end;
Mon l$MEssage a4 apparaît, mais pas le a5.
En pièce jointe, j'ai mis un fichier ZIP avec le projet complet.
Pourriez-vous me mettre sur la voie, s'il vous plaît ! Merci d'avabce !
Partager