Bonjour,
désolé de vous déranger à nouveau mais j'ai besoin d'explication.
Dans l'exemple que j'essaie len=3
Les différence sont tab : array of char ; -> tab : array[0..32] of char ;
et mise en commentaire de SetLength
Voici le code ci-dessous (qui ne fonctionne pas) :
Ce code fonctionne pourquoi ?
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
30
31
32
33
34
35
36
37
38 procedure CatValue(Registre : TRegistry; key : TStrings) ; Var i, j : integer ; RegDataInfo : TRegDataInfo ; tmp : string ; tab : array of char ; len : integer ; begin // vérifier que value exist // multi value // afficher selon contenue sous forme valuename= For i := 1 to key.Count -1 do begin if Registre.ValueExists(key[i]) then begin if Registre.GetDataInfo(key[i], RegDataInfo) then begin case RegDataInfo.RegData of rdString, rdExpandString : tmp := Registre.ReadString(key[i]) ; rdInteger : tmp := IntToStr(Registre.ReadInteger(key[i])) ; rdBinary : begin len := RegDataInfo.DataSize ; SetLength(tab, len) ; Registre.ReadBinaryData(key[i], tab, len) ; // sort de la boucle for et termine le programme en indiquant une erreur d'écriture mémoire for j := 0 to len do begin write(tab[j]) ; end ; end ; else tmp := 'Unknow ' end ; end ; end else ErrorStd('"' + key[i] + '" does''nt exists') ; end ; end ;
Où est mon erreur ? (erreur de débutant certainement, mais depuis le temps que je programme en delphi ça m'embête)
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
30
31
32
33
34
35
36
37 procedure CatValue(Registre : TRegistry; key : TStrings) ; Var i, j : integer ; RegDataInfo : TRegDataInfo ; tmp : string ; tab : array[32] of char ; len : integer ; begin // vérifier que value exist // multi value // afficher selon contenue sous forme valuename= For i := 1 to key.Count -1 do begin if Registre.ValueExists(key[i]) then begin if Registre.GetDataInfo(key[i], RegDataInfo) then begin case RegDataInfo.RegData of rdString, rdExpandString : tmp := Registre.ReadString(key[i]) ; rdInteger : tmp := IntToStr(Registre.ReadInteger(key[i])) ; rdBinary : begin len := RegDataInfo.DataSize ; //SetLength(tab, 32) ; Registre.ReadBinaryData(key[i], tab, len) ; for j := 0 to len do begin write(tab[j]) ; end ; end ; else tmp := 'Unknow ' end ; end ; end else ErrorStd('"' + key[i] + '" does''nt exists') ; end ; end ;
Partager