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 :

Delphi XE3 messages inattendus du débogueur


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de hlmhv
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 212
    Points : 165
    Points
    165
    Par défaut Delphi XE3 messages inattendus du débogueur
    Bonjour à tou(te)s! :-)

    Je me trompe, je suis trop vieux, ou XE3 est finalement une vraie daube?
    J'ai l'impression que jusqu'à Delphi 7 - que je ne puis plus réinstaller depuis W7, merci Microsoft! - plus rien ne va vraiment sans soucis.

    Un exemple et une demande d'aide en même temps: je désire simplement implémenter une méthode de recherche de fichier, et j'utilise pour ce faire le code récursif suivant:

    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
    procedure TForm19.SearchTree(DName, Fname: String);
    var
      SearchRec: TSearchRec;
      DosError: integer;
      dir: string;
    begin
      DLB.Directory:=DName;
      if dName[length(dName)] <> '\' then
        DName := DName + '\';
      ChDir(DName);
      GetDir(0, Dir);
      EdDirectorySeeked.Text:=Dir;
      Refresh;
      Memo.Lines.add('*** '+DName+'//'+FName);  (* ligne temporaire à retirer! *)
      DosError := FindFirst(FName, 0, SearchRec);
      while DosError = 0 do begin
        try
          If (SearchRec.Attr and faHidden)=0 Then Begin
            Memo.Lines.add(dir +'\'+ SearchRec.name);
            Inc(Count);
          End;
        except
          on EOutOfResources do begin
            ShowMessage('Ressources épuisées!');
            abort;
           end;
        end;
        DosError := FindNext(SearchRec);
      end;
      {Now that we have all the files we need, lets go to a subdirectory.}
      DosError := FindFirst('*.*', faDirectory, SearchRec);
      while DosError = 0 do begin
        {If there is one, go there and search.}
        if ((SearchRec.attr and faDirectory = faDirectory) and
          (SearchRec.name <> '.') and (SearchRec.name <> '..')) then begin
         if dName[length(dName)] <> '\' then
           DName := DName + '\';
         ChDir(DName+SearchRec.name);
         GetDir(0, DName);  //:=SearchRec.name;
         SearchTree(DName, Fname); {Time for the recursion!}
         ChDir('..'); {Down one level.}
        end;
        DosError := FindNext(SearchRec); {Look for another subdirectory}
      end;
      Label1.Caption:=IntToStr(Count)+' fichiers.';
      EdDirectorySeeked.Text:='';
    end; {SearchTree}

    Cela marche.. parfois. Sinon en déboguant je reçois des messages abscons genre "Introduisez le chemin de VCL.CONTROLS" alors que ce module est déclaré en en-tête, sans que le compilateur y trouve à réchigner..
    Si, bon prince, je lui donne le répertoire de VCL.CONTROLS, le débogueur ouvre ce fichier.. mais je perds le curseur, donc je ne peux pas voir où l'on en est et encore moins corriger!
    Enfin si je me passe du débogueur et me sers du code compilé, alors il cale au deuxième sous-répertoire scanné et me dit "impossible de trouver le fichier spécifié".
    Ouais. Sauf que si je relance la procédure cela ne me donne plus ce message..

    Quelqu'un a une idée différente de passer sur Windev?

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 065
    Points
    41 065
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par hlmhv Voir le message
    Je me trompe, je suis trop vieux, ou XE3 est finalement une vraie daube?
    il a ses bogues, comme chaque versions, mais aussi ses avancées
    J'ai l'impression que jusqu'à Delphi 7 -
    Par rapport à D7 et ce depuis D2009 Delphi est passé à l'unicode ce qui a bouleversé quelques trucs comme les pointeurs, les strings etc...
    par exemple : un PChar en D7 était un PAnsiChar après l'Unicode c'est devenu un PWideChar
    une string D7 est une AnsiString après Unicode une WideString
    etc...
    il y a donc des vieux codes qu'il faut adapter (j'en fait encore l'expérience depuis 3 jours avec une DLL 32 bits en D3 que veux veux passer en 64 bits, et ce n'est pas du gateau )

    je n'ai pas lu la suite du code par manque de temps, désolé, mais cela donne déjà quelques pistes
    un pavé à digérer https://www.embarcadero.com/images/d...-migration.pdf
    et je n'ai pas non plus vu de clôture de la recherche findclose(SearchRec);, dans le cadre d'un récursivité ce n'est pas très bon

    que je ne puis plus réinstaller depuis W7, merci Microsoft! - plus rien ne va vraiment sans soucis.
    c'est pas parce que MS dit que D7 est un programme obsolète que l'on ne peut pas l'installer sur W7 et + (je l'utilise sur W10) il suffit de quelques astuces (à rechercher dans le forum) par exemple http://www.developpez.net/forums/d15...-windows-10-a/
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre habitué Avatar de hlmhv
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 212
    Points : 165
    Points
    165
    Par défaut
    Merci pour Ces infos!
    Pour Findclose, sorry, oubli de ma part (suis pas fier..).
    Ceci dit, je viens de corriger le tir en ajoutant les deux FindClose nécessaire: que dalle..
    Enfin, merci en tout cas pour le lien concernant l'installation de D7 sur W7 et +, j'en avais trouvé un autre qui fonctionnait.. presque, mais je vais voir celui-là!

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 740
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 740
    Points : 13 285
    Points
    13 285
    Par défaut
    Ce code n'aurait pas fonctionné sous D7 non plus, cette procédure est incorrecte.

    Dans ta recherche de répertoire, tu changes le répertoire de travail par ChDir et réassignes DName par GetDir. Après SearchTree, tu remontes d'un dossier par ChDir('..') sans pour autant réaffecter DName qui continue de pointer sur le sous-répertoire. La boucle suivante ne peut qu'être dans les choux

    Mais tu n'as pas besoin de changer le répertoire de travail, ajoute simplement le chemin au masque de recherche :
    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
    procedure TForm19.SearchTree(DName, FName: String);
    var
      SearchRec: TSearchRec;
     
    begin
      DName := IncludeTrailingPathDelimiter(DName);
     
      if FindFirst(DName +FName, 0, SearchRec) = 0 then
      try
        repeat
          Memo.Lines.add(DName +SearchRec.name);
          Inc(Count);
        until FindNext(SearchRec) <> 0;
      finally
        FindClose(SearchRec);
      end;
     
      if FindFirst(DName +'*', faDirectory, SearchRec) = 0 then
      try
        repeat
          if ((SearchRec.attr and faDirectory = faDirectory) and (SearchRec.name <> '.') and (SearchRec.name <> '..')) then
           SearchTree(DName +SearchRec.name, FName);
        until FindNext(SearchRec) <> 0;
      finally
        FindClose(SearchRec);
      end;
    end;

  5. #5
    Membre habitué Avatar de hlmhv
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 212
    Points : 165
    Points
    165
    Par défaut
    Ben voila, c'est plus simple quand on explique!
    Et quand, comme je viens de le faire, on recode le tout avec Lazarus, aussi..
    Merci bien tous les deux: 1) j'ai la routine que je voulais et 2) j'ai appris quelque chose.
    De l'art de simplifier les choses, bravo!

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

Discussions similaires

  1. Delphi Xe3 : dernières nouvelles
    Par John Colibri dans le forum EDI
    Réponses: 11
    Dernier message: 11/09/2012, 15h30
  2. delphi xe3 : licence Delphi Pro : modifications annulées
    Par John Colibri dans le forum Delphi
    Réponses: 1
    Dernier message: 03/09/2012, 19h31
  3. Delphi Xe3 : les projets à venir
    Par John Colibri dans le forum EDI
    Réponses: 0
    Dernier message: 21/08/2012, 10h49
  4. Delphi Xe3 - Lancement
    Par John Colibri dans le forum EDI
    Réponses: 0
    Dernier message: 18/08/2012, 12h22
  5. Réponses: 6
    Dernier message: 23/04/2008, 10h15

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