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

Delphi Discussion :

problème GetModuleName sous linux


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 171
    Par défaut problème GetModuleName sous linux
    Bonjour

    je viens de galérer un moment avec un dev sous linux a cause du comportement de GetModuleName
    GetModuleName semble ajouter un #0 dans la chaine de retour
    si on lit un fichier ou on enregistre le résultat de GetModuleName en ajoutant .fblog cela donne la chose suivante
    /^@f^@b^@t^@e^@s^@t^@f^@b^@l^@o^@g^@l^@i^@n^@u^@x^@^@^@.^@f^@b^@l^@o^@g^@"^@^M^@
    il y a ^@^@ entre le nom du module name '/fbtestfbloglinux' et le '.fblog' que j'ajoute
    le code qui génère le soucis est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strTemp := GetModuleName(0)+ '.fblog';
    Cela forcement pose des soucis lorsque je cherche a générer ou accéder a un fichier
    Mais cela plante l'IDE si je fait un Writeln du resultat
    pour contourner le soucis j'utilise ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        strTemp := GetModuleName(0) ;
        SetLength(strTemp,length(strtemp)-1);
        strTemp := strTemp + '.fblog';
    est ce un bug ou faut il éviter d'utiliser GetModuleName sous Linux ?
    Embarcadero® RAD Studio 10.4 Version 27.0.38860.1461

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 708
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    GetModuleName(0) je ne connaissais pas, il est d'ailleurs indiqué que
    Avertissement : Sous MAC OS, GetModuleName ne réussit pas toujours.
    c'est peut-être le cas pour d'autres OS.
    D'autre part, les résultat est peut-être aussi dû à un encodage particulier ?

    est ce un bug ou faut il éviter d'utiliser GetModuleName sous Linux ?
    AMHA c'est un bug, cette fonction appelle GetModuleFilename qui est un appel à une API windows , pourtant pas de directives de compilation {$IFDEF WINDOWS} mais je n'ai peut-être pas assez fouillé dans le source.

    J'aurais simplement utilisé paramstr(0) qui lui semble fonctionner dans tous les OS.
    Néanmoins pour du multiplateforme j'aurais utilisé l'unité IOUtils.Tpath et obtenu un répertoire particulier (pas forcément celui de l'application, souvent protégé)
    ce tableau en donne une liste précise

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 171
    Par défaut
    Bonjour SergioMaster

    merci pour ta réponse
    surtout le lien vers le tableau de IOUtils.Tpath
    je vais regarder çà

  4. #4
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    J'sais pas si c'est officiellement fonctionnel, mais si tu as un programme d'exemple n'hésite pas à ouvrir un ticket d'incident. Au pire ils répondront qu'il n'est pas pris en charge pour le moment.

    Pour le #0 c'est sans doute parce que Linux a historiquement des chaines en ASCIIZ. Ca aussi, si tu as un programme d'expie, tu peux le faire remonter parce qu'à mon avis c'est passé à la trappe dans certains modules de l'OS. (après ça dépend aussi du type de chaine utilisé)

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 171
    Par défaut
    Bonsoir
    @pprem : ticket ouvert RSP-32373
    @SergioMaster : si je vais dans le répertoire contenant le programme et que je l’exécute paramstr(0) me renvoie que le nom du programme
    contrairement à GetModulename(0) qui lui me renvoie le chemin complet peu importe comment est exécuté le programme

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 708
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par fbalien Voir le message
    @SergioMaster : si je vais dans le répertoire contenant le programme et que je l’exécute paramstr(0) me renvoie que le nom du programme
    contrairement à GetModulename(0) qui lui me renvoie le chemin complet peu importe comment est exécuté le programme
    Il va falloir que je prenne le temps d'essayer autrement que sur une machine virtuelle (wsl)

  7. #7
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Merci pour le RSP

    Citation Envoyé par fbalien Voir le message
    si je vais dans le répertoire contenant le programme et que je l’exécute paramstr(0) me renvoie que le nom du programme
    Me souvenais plus de cet effet de bord, mais effectivement, ce sont les morceaux de la ligne de commande, donc c'est logique.

    Il y a des chances que System.IOUtils.TDirectory.GetCurrentDirectory ne soit pas non plus d'une grande aide si le programme a été lancé d'ailleurs.

    Par contre tu as peut-être une chance avec System.IOUtils.TPath.GetFullPath sur paramstr(0) qui devrait recalculer le chemin du programme.

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

Discussions similaires

  1. [LabView 8.5] Problème VI sous Linux
    Par nuFox dans le forum LabVIEW
    Réponses: 1
    Dernier message: 18/03/2008, 19h59
  2. Problème MySQL sous Linux
    Par Feysal dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 07/08/2007, 17h46
  3. Problème exec sous Linux
    Par jaggy19 dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2007, 15h13
  4. problème éxécution sous linux
    Par madmox dans le forum Général Java
    Réponses: 4
    Dernier message: 30/05/2007, 20h14
  5. Problème oracle10g sous linux debian
    Par man84 dans le forum Debian
    Réponses: 2
    Dernier message: 12/12/2006, 12h36

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