IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Probleme sur DLL & VCL


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Probleme sur DLL & VCL
    Bonjour, voila j'ai récupéré une petite dll mais je ne comprend pas une chose :S

    Lorsque je tente de l'utilisé il me donne soit une erreur d'exeption soir un chemin non valide.

    Merci a celui qui y jetera un oeil et qui poura peut-être m'aider.

    DLL
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    function CompressTODu(Files : TStrings; const Filename : String): Boolean;
    var
      infile, outfile, tmpFile : TFileStream;
      compr : TCompressionStream;
      i,l : Integer;
      s : String;
     
    begin
      if Files.Count > 0 then
      begin
        outFile := TFileStream.Create(Filename,fmCreate);
        try
          l := Files.Count;
          outfile.Write(l,SizeOf(l));
          for i := 0 to Files.Count-1 do
          begin
            infile := TFileStream.Create(Files[i],fmOpenRead);
            try
              s := ExtractFilename(Files[i]);
              l := Length(s);
              outfile.Write(l,SizeOf(l));
              outfile.Write(s[1],l);
              l := infile.Size;
              outfile.Write(l,SizeOf(l));
              tmpFile := TFileStream.Create('tmp',fmCreate);
              compr := TCompressionStream.Create(clMax,tmpfile);
              try
                compr.CopyFrom(infile,l);
              finally
                compr.Free;
                tmpFile.Free;
              end;
              tmpFile := TFileStream.Create('tmp',fmOpenRead);
              try
                outfile.CopyFrom(tmpFile,0);
              finally
                tmpFile.Free;
              end;
            finally
              infile.Free;
            end;
          end;
        finally
          outfile.Free;
        end;
        DeleteFile('tmp');
      end;
       result := true;
    end;
    VCL
    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
    const
    ...
    function CompressTODu(Files : TStrings; const Filename : String):Boolean; stdcall; external 'Ma.dll';
    ...
    procedure TFormM.ImageFCClick(Sender: TObject);
    var Fil: Tfilename;
    begin
    if (ListBox.Count = 0)
     then
      Begin
       Label1.Caption :='Aucun fichier a compressé';
      end;
      if (ListBox.Count >= 1)
     then
    begin
    Fil := 'C:/Test.test'; // Essayer aussi avec Test.test
    CompressTODu(ListBox.Items,Fil);
    end;
    end;

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    salut,
    essaie dans le code de ta Dll de déclarer ta fonction exportée comme etant en stdcall, vu que dans ton code VCL tu la déclare comme tel.
    vérifie l'affectation de valeur à ta variable Fil et fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fil := 'C:\Test.test'; // Essayer aussi avec Test.test
    au lieu de cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fil := 'C:/Test.test'; // Essayer aussi avec Test.test

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Merci, effectivment sa venais du Stdcall
    (Par contre je ne sai spas comment la déclaré dans la fonction donc je l'ai hoté de la vcl )
    (Donc si tu sais comment faire je veux bien savoir :°))


    Edit: Je recherche aussi comment faire pour faire un OpenDialog ou Savedialog pour un dossier. (Exemple choisir le dossier de décompression)

  4. #4
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par Romain²
    Merci, effectivment sa venais du Stdcall
    (Par contre je ne sai spas comment la déclaré dans la fonction donc je l'ai hoté de la vcl )
    comment déclarer la fonction dans la DLL ? ajoute juste la déclaration stdcall (comme tu l'a faite dans le code VCL)

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    function CompressTODu(Files : TStrings; const Filename : String): Boolean; stdcall;
    var
      infile, outfile, tmpFile : TFileStream;
      compr : TCompressionStream;
      i,l : Integer;
      s : String;
     
    begin
      if Files.Count > 0 then
      begin
        outFile := TFileStream.Create(Filename,fmCreate);
        try
          l := Files.Count;
          outfile.Write(l,SizeOf(l));
          for i := 0 to Files.Count-1 do
          begin
            infile := TFileStream.Create(Files[i],fmOpenRead);
            try
              s := ExtractFilename(Files[i]);
              l := Length(s);
              outfile.Write(l,SizeOf(l));
              outfile.Write(s[1],l);
              l := infile.Size;
              outfile.Write(l,SizeOf(l));
              tmpFile := TFileStream.Create('tmp',fmCreate);
              compr := TCompressionStream.Create(clMax,tmpfile);
              try
                compr.CopyFrom(infile,l);
              finally
                compr.Free;
                tmpFile.Free;
              end;
              tmpFile := TFileStream.Create('tmp',fmOpenRead);
              try
                outfile.CopyFrom(tmpFile,0);
              finally
                tmpFile.Free;
              end;
            finally
              infile.Free;
            end;
          end;
        finally
          outfile.Free;
        end;
        DeleteFile('tmp');
      end;
       result := true;
    end;
    Citation Envoyé par Romain²
    Je recherche aussi comment faire pour faire un OpenDialog ou Savedialog pour un dossier. (Exemple choisir le dossier de décompression)
    SaveDialog/OpenDialog pour un dossier ? regarde un peu du coté de l'aide des composants en question... :

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Merci j'ai trouvé.

    (SelectDirectory)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LG]Probleme sur l'identification de typage
    Par axelmeunier dans le forum Langage
    Réponses: 10
    Dernier message: 19/01/2004, 13h41
  2. Réponses: 3
    Dernier message: 07/04/2003, 20h06
  3. Probleme sur le Fields des fichiers Xmlgram
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 4
    Dernier message: 20/03/2003, 17h09
  4. Probleme sur un AppendChild
    Par Toxine77 dans le forum XMLRAD
    Réponses: 3
    Dernier message: 14/03/2003, 18h25
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo