Bonjour
J'ai un problème bizarre avec une dll (voir ici) que j'utilise
Je fais un programme pour afficher le contenu d'un fichier compressé. J'ai un menu Charger, lorsque je clique dessus je décompresse mon fichier grace à une fonction contenue dans une DLL.
Code du menu Charger:
Code Delphi : 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
39
40
41
42
43
44
45
46
47 procedure TfrmPrincipal.cmdChargerClick(Sender: TObject); var extensionSelection : string; fichierSelectionne : Tmemorystream; fichierDecomp : Tmemorystream; tailleFinale : LongWord; begin //si fichier choisi if choixFichier.Execute then begin //récupère son extension extensionSelection := ExtractFileExt(choixFichier.Files[0]); try //crée une zone en mémoire fichierSelectionne := TMemoryStream.Create; fichierSelectionne.LoadFromFile(choixFichier.Files[0]); if extensionSelection = '.cdat' then begin //décompresse fichierDecomp:= TMemoryStream.Create; //récupère taille finale tailleFinale := decompress_size(fichierSelectionne.Memory); //assigne la taille au futur fichier décompressé fichierDecomp.Size := tailleFinale; //décompresse le fichier compressé tailleFinale := decompress(fichierSelectionne.Memory,fichierDecomp.Memory); end; finally if Assigned(fichierSelectionne) = true then begin fichierSelectionne.Free; end; if Assigned(fichierDecomp) = true then begin fichierDecomp.Free; end; end; end; end;
Jusque la ça fonctionne J'ai essayé de découper mon code pour que le bout de code qui décompresse, soit dans une autre procédure:
Code Delphi : 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 TfrmPrincipal.cmdChargerClick(Sender: TObject); var extensionSelection : string; fichierSelectionne : Tmemorystream; fichierDecomp : Tmemorystream; begin //si fichier choisi if choixFichier.Execute then begin //récupère son extension extensionSelection := ExtractFileExt(choixFichier.Files[0]); try //crée une zone en mémoire fichierSelectionne := TMemoryStream.Create; fichierSelectionne.LoadFromFile(choixFichier.Files[0]); if extensionSelection = '.cdat' then begin //décompresse fichierDecomp:= TMemoryStream.Create; decompresserFichier(fichierSelectionne,fichierDecomp); end; finally if Assigned(fichierSelectionne) = true then begin fichierSelectionne.Free; end; if Assigned(fichierDecomp) = true then begin fichierDecomp.Free; end; end; end; end;
La fonction decompresserFichier() :
Problème : l'appel fonctionne mais au moment de sortir de cette dernière fonction decompresserFichier(), delphi me génère une erreur "Access Violation ............."
Code Delphi : 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 procedure TfrmPrincipal.decompresserFichier(var fichierLecture : Tmemorystream; var fichierEcriture: Tmemorystream); var tailleFinale : LongWord; begin //récupère taille finale tailleFinale := decompress_size(fichierLecture.Memory); //assigne la taille au futur fichier décompressé fichierEcriture.Size := tailleFinale; //décompresse le fichier compressé tailleFinale := decompress(fichierLecture.Memory,fichierEcriture.Memory); end;
Et j'ai cette erreur uniquement si je découpe mon code.
Si vous avez une idée de pourquoi ça plante, j'en serai plus que ravie. Ca fait plusieurs jours que je suis la dessus et je commence à désésperer
Merci d'avance
Partager