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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| Unit Utils;
Interface
Uses
Windows, Messages, SysUtils, Classes, ZipMstr, Dialogs, Forms;
Const
// constante utilisée pour savoir comment est la DDL Zip
DLLZIP_ALREADYLOADED = 0;
DLLZIP_ERREXTRACT = 1;
DLLZIP_LOADNOW = 2;
DLLZIP_UNLOADNOW = 3;
Function LoadDllZipNow(Var ZipMaster: TZipmaster; Load: Boolean = True): Integer;
Implementation
Function ExtractOfRes(ResName, FileName: String): Boolean;
Var
ResourceStream: TResourceStream;
FichierStream: TFileStream;
Begin
Result := False;
If FileExists(FileName) Then // on vérifie que le fichier à extraire n'existe pas déjà
DeleteFile(FileName); // sinon on le supprime
If Not FileExists(FileName) Then // si le fichier n'existe pas alors on l'extrait
Begin
ResourceStream := TResourceStream.Create(hInstance, ResName, RT_RCDATA); // création d'un flux mémoire donnant accès à la ressource compilé
Try
FichierStream := TFileStream.Create(FileName, fmCreate); // FileStream permet aux applications de lire et écrire dans un fichier disque.
Try
FichierStream.CopyFrom(ResourceStream, 0); // copie du flux donnant accès aux ressources vers le flux fichier
If FileExists(FileName) Then
Result := True
Else
Result := False;
Finally
FichierStream.Free; //libération mémoire du stream fichier
End;
Finally
ResourceStream.Free; //libération mémoire du flux mémoire
End;
End;
End;
{$R DelZip179.RES} //ceci permet d'inclure la DLL DelZip179.DLL
// permet de vérifier s'il y a besoin ou non de charger la DLL ZIP
Function LoadDllZipNow(Var ZipMaster: TZipmaster; Load: Boolean = True): Integer;
Var
DllZipMasterName: String;
Begin
DllZipMasterName := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'DelZip179.dll'; // on récupère le chemin temporaire et on ajoute le nom de la DLL ZIP
If Load Then // l'utilisateur veut l'utiliser on vérifie qu'elle est chargée sinon ont la charge
Begin
If FileExists(DllZipMasterName) And ZipMaster.DLL_Load Then // on vérifie que le fichier existe et qu'elle est déjà chargée
Result := DLLZIP_ALREADYLOADED // on renvoie comme réponse quel est déjà chargé
Else
If Not FileExists(DllZipMasterName) And Not ExtractOfRes('DelZip179', DllZipMasterName) Then // si le fichier existe pas on essaye de l'extraire
Result := DLLZIP_ERREXTRACT // on renvoie comme réponse impossible de l'extraire
Else
Begin
ZipMaster.DLLDirectory := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)); // le fichier existe et elle n'est pas chargée alors on effectue le chargement
ZipMaster.DLL_Load := True;
Result := DLLZIP_LOADNOW; //on renvoie comme réponse que l'on vient de charger la DLL
End;
End
// utilisateur veut la décharger alors on vérifie qu'elle est chargé
Else
If ZipMaster.Dll_Load Then
Begin
ZipMaster.Dll_Load := False; // la DLL est chargé ont la décharge
DeleteFile(DllZipMasterName); // puis on efface le fichier
Result := DLLZIP_UNLOADNOW; // on renvoie comme réponse que la dll a été déchargé
End
Else
Result := -1; // erreur l'utilisateur veut la décharger mais elle n'est pas chargée on renvoie -1
End;
End. |
Partager