Problème de DLL : plantage depuis découpage de code
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:
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:
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() :
Code:
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; |
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 ............."
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 :bug:
Merci d'avance