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

Lazarus Pascal Discussion :

"Module non utilisé", d'après le compilo


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 355
    Points
    15 355
    Par défaut "Module non utilisé", d'après le compilo
    Bonjour,

    J'ai un gros projet plein de modules et tout va bien.

    Et comme je dois y implémenter de nouvelles fonctionnalités, j'y crée un nouveau module, je fais comm' d'hab' et aussi comme dans un précédent module dont je m'inspire et tout va bien, jusqu'à la compilation :
    Citation Envoyé par Compilo
    traybag.lpr(20,45) Hint: Unit "module_process_n_co" not used in traybag
    traybag c'est le nom du projet, tout le monde l'a compris, et dans son code on y trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    implementation
    uses
      module, module_process_n_co;
    Le second module a été rajouté tout à l'heure, pour module ça fait deux dizaines d'années qu'il est là.

    Et le module_process_n_co ne contient pour l'instant qu'une petite procédure de test (j'ai enlevé les lignes vides pour alléger le post) :
    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
    unit module_process_n_co;
    {$mode objfpc}{$H+}
    interface
    uses
      Classes, SysUtils;
    procedure test_runcommand;
    implementation
    uses process;
    procedure test_runcommand;
    var s : ansistring;
    begin
      runcommand('ip', ['a'], s);
      writeln(s);
    end;
    end.
    L'appel de cette proc se fait ainsi, depuis le main.pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TTraybagFrm.FormCreate(Sender: TObject);
    begin
      module_process_n_co.test_runcommand;
      Halt; 
      Exit;
      //...
    end;
    Et une fois les uses correctement configurés, il m'a suffi de saisir module_process_n_co. pour que la complétion me propose test_runcommand donc les liens et les raccords sont valides, confirmé par le fait que la ligne dans l'edi "Projet / Ajouter le fichier de l'éditeur au projet" est grisée (donc c'est déjà fait), et confirmé également par le fait que "Projet / Retirer du projet" montre bien mon module, sélectionnable si l'envie me prenait de le retirer.
    J'en perds le peu de latin qu'il me reste.
    Alors, si quelqu'un a une idée...

    Grand merci d'avance,

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 355
    Points
    15 355
    Par défaut
    Citation Envoyé par Jipété Voir le message
    jusqu'à la compilation :
    Citation Envoyé par Compilo
    traybag.lpr(20,45) Hint: Unit "module_process_n_co" not used in traybag
    Et le plus dément (non, je n'ai pas eu cette idée jusqu'à maintenant, au vu du message d'erreur), c'est que l'exécution du programme se passe bien et que ce qu'il y a dans le module est bien utilisé...

    Comment expliquer ça ?

  3. #3
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 353
    Points
    4 353
    Billets dans le blog
    2
    Par défaut
    Hello,

    Le message en soit n'est pas impactant. Je dirais que c'est un cas de figure ou il y a un bug dans le compilateur. Pourquoi préfixer la fonction module_process_n_co.test_runcommand; avec le nom de l'unité ? pas besoin. C'est peut-être juste ça qui fait que le compilo s'emmêle les pinceaux.

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 355
    Points
    15 355
    Par défaut
    Salut,
    Citation Envoyé par BeanzMaster Voir le message
    Le message en soi n'est pas impactant.
    Non, mais il fout la trouille.

    Citation Envoyé par BeanzMaster Voir le message
    Je dirais que c'est un cas de figure où il y a un bug dans le compilateur.
    Je penche aussi pour ça mais pas que, lire à la fin...

    Citation Envoyé par BeanzMaster Voir le message
    Pourquoi préfixer la fonction module_process_n_co.test_runcommand; avec le nom de l'unité ? Pas besoin.
    C'est ce qui m'a permis de constater que la complétion fonctionnait bien, donc que le module était plus ou moins correct.

    Citation Envoyé par BeanzMaster Voir le message
    C'est peut-être juste ça qui fait que le compilo s'emmêle les pinceaux.
    Ce qui ne l'empêche pas de produire un code fonctionnel (récupération d'infos système et affichage par ShowMessage) utilisant ce module ! C'est fou, ça.

    Ceci étant dit, le petit programme qui compile sans erreur me sert à tester un machin hautement compliqué d'appel système en utilisant TProcess pour monter un disque dans la machine (Linux, je le rappelle), et ça fonctionne bien, TProcess appelle un script Bash qui utilise les outils ntfs-3g car le(s) disque(s) en question sont formatés ntfs afin que mes enfants puissent les lire sans prise de tête le jour où...

    Et donc le petit programme de test récupère bien la sortie TProcess.Output dans une TStringList, que du bonheur.
    La même construction avec le même script dans le gros programme (de "prod") se bloque à la lecture de l'Output et là, deux options pour moi :
    • soit démonter depuis un terminal le disque qui a été correctement monté et il sera donc inutilisable pour la suite (sauvegarde externe), mais ça libère quelque chose dans la lecture de la sortie, je ne sais pas quoi ;
    • soit désactiver la récupération de TProcess.Output et travailler alors en aveugle, ce qui est ennuyeux.

    Conclusion, j'ai bien un souci quelque part dans le gros programme et je ne vois bien sûr pas où.

    Allez, j'y retourne.

  5. #5
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 353
    Points
    4 353
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,

    La même construction avec le même script dans le gros programme (de "prod") se bloque à la lecture de l'Output et là, deux

    Allez, j'y retourne.
    C'est surement que ton bash ou le programme lancé par lui, exécute une autre commande dans un autre processus (thread) ou en arrière-plan, ce qui pourrait bloquer le output.

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 355
    Points
    15 355
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    C'est surement que ton bash ou le programme lancé par lui, exécute une autre commande dans un autre processus (thread) ou en arrière-plan, ce qui pourrait bloquer le output.
    Admettons, mais alors ce comportement, je devrais le retrouver dans le petit prog de test ? Ce n'est pas le cas !
    Une précision : il n'y a qu'un seul script pour ce taf, appelé soit par le petit prog qui va bien, soit par le gros prog qui coince.
    Je creuse, je creuse...

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 355
    Points
    15 355
    Par défaut
    Ça va, j'ai trouvé, pour le blocage !

    Le script était truffé de retours pour vérifier presque ligne par ligne que tout se passait bien car, mine de rien, les outils ntfs-3g ne respectent pas parfaitement le fonctionnement Linux1, et donc une fois tout bien en place j'ai commenté tout un tas de lignes avec echo et résultat, au niveau supérieur la sortie TProcess.Output attendait tranquillement que quelque chose se présente depuis le script, qui avait terminé silencieusement...

    J'ai rétabli une sortie de données et c'est OK.

    Mais le message du compilo est toujours là,
    Et pour ne pas l'avoir, il me faut passer par le menu Projet / Retirer du projet... et choisir ce module, mais ça ne m'empêche pas de pouvoir continuer à accéder aux procédures qu'il contient, avouez que c'est loufoque !

    Bon dimanche,
    ---
    1: des trucs genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ret=$(mount -t ntfs-3g /dev/sdxy /point-de-montage)
    echo $ret
    retournent une ligne vide, hé ouais... Il faut passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mount -t ntfs-3g /dev/sdxy /point-de-montage
    ret=$?
    echo $ret
    pour avoir qqchse.

Discussions similaires

  1. [OSF] setuid non utilisé
    Par ejl07 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 19/10/2007, 10h20
  2. Swap non utilisé
    Par Finidrigoler dans le forum Administration système
    Réponses: 7
    Dernier message: 10/07/2007, 21h07
  3. Chargement automatique de module non désiré
    Par Celelibi dans le forum Administration système
    Réponses: 4
    Dernier message: 01/01/2007, 13h31
  4. Réponses: 4
    Dernier message: 29/09/2006, 16h38
  5. fermer un Access non utilisé
    Par GAGNON dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2005, 13h08

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