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

Free Pascal Discussion :

Passage d'un tableau en paramètre de la fonction ShellExecute


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2020
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2020
    Messages : 33
    Par défaut Passage d'un tableau en paramètre de la fonction ShellExecute
    Bonsoir tout le monde,

    Il se fait un peu tard mais je recherche un peu d'aide pour le problème suivant :

    Je dois lancer n fois le même exécutable et à chaque exécution l'exécutable se voit attribuer des paramètres différents.
    Pour l'instant je répète 80 fois la ligne de commande avec les paramètres appropriés, ce qui n'est pas optimal.

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Parameters : Array [1..80] of string;
     
    ShellExecute(0, 'open', 'C:\Users\Yaacov\Desktop\TEST\TEST_DATE', @Parameters[I], nil, 1)
    mais je n'arrive pas à récuperer les valeurs appropriées avec paramstr(1), paramstr(2), paramstr(3) etc dans le Pgm appelé.

    Idéalement j'aurais voulu faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For  I:= 1 to 80 do ShellExecute(0, 'open', 'C:\Users\Yaacov\Desktop\TEST\TEST_DATE', @Parameters[I], nil, 1)
    Merci pour vos suggestions et conseils.
    Bonne soirée.

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 644
    Par défaut Paramètres
    Bonsoir,

    Deux instructions : ParamCount et ParamStr(i). Je conseille d'aller voir la doc en ligne de Lazarus ne serait-ce que pour les exemples pour divers systèmes d'exploitation. L'usage ne sert pas qu'aux programme en ligne de commande. Si on fait un glisser déposer sur un programme ou son raccourci, ce qui est déposé est passé par les même arguments.

    Exemple de création d'une liste de chiers passés en argument.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strs := TStringList.Create;
    for i := 1 to ParamCount do if FileExists(ParamStr(i)) then strs.Add(ParamStr(i));
    ParamStr(0) est le premier argument c'est à dire le nom du programme exécuté.

    Salutations

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    Par défaut
    Le paramètre est incorrect.

    Une variable chaîne est un pointeur, un tableau de chaînes est donc un tableau de pointeurs. En utilisant @Parameters[I] tu lui passes l'adresse du pointeur de la chaîne et non l'adresse du premier caractère de la chaîne.

    Lorsqu'on comprend que @Parameters[I] retourne un pointeur, on pourrait compléter la déclaration et dire je veux l'adresse du premier élément @Parameters[I][1] mais ce n'est pas très intuitif ! A la place, donnons simplement à ShellExecute le type de paramètre qu'elle attend PChar(Parameters[I]). PChar se charge pour nous de toutes ces redirections

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2020
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2020
    Messages : 33
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Le paramètre est incorrect.

    Une variable chaîne est un pointeur, un tableau de chaînes est donc un tableau de pointeurs. En utilisant @Parameters[I] tu lui passes l'adresse du pointeur de la chaîne et non l'adresse du premier caractère de la chaîne.

    Lorsqu'on comprend que @Parameters[I] retourne un pointeur, on pourrait compléter la déclaration et dire je veux l'adresse du premier élément @Parameters[I][1] mais ce n'est pas très intuitif ! A la place, donnons simplement à ShellExecute le type de paramètre qu'elle attend PChar(Parameters[I]). PChar se charge pour nous de toutes ces redirections
    Super ca marche Grand Merci Andnotor pour la réponse fournie de surcroit pendant un Dimanche
    et merci également a Guesset pour sa réponse écrite a une heure tardive.

    PS:
    J'ai un dernier petit problème.
    Chaque exécution du programme appelé crée son propre fichier de résultats. Je voudrais Concaténer tous les fichiers de résultats à l'aide d'une instruction dans le programme appelant.
    Pour se faire je veux être sûr que toutes les n exécutions soient terminées.
    Quelle serait l'instruction la plus appropriée (J'ai noté la fonction WaitForSingleObject(processInfo.hProcess, INFINITE)) ?
    Merci et bon dimanche.

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 171
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Concernant votre seconde question, peut-être l'exemple ci-joint vous sera-t-il utile. Je l'ai trouvé sur ce site, où il y a pas mal de choses intéressantes : { https://assarbad.net }
    Fichiers attachés Fichiers attachés

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2020
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2020
    Messages : 33
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Bonjour ! Concernant votre seconde question, peut-être l'exemple ci-joint vous sera-t-il utile. Je l'ai trouvé sur ce site, où il y a pas mal de choses intéressantes : { https://assarbad.net }
    Bonjour Roland,


    Merci pour la réponse je vais regarder cela de plus près.
    Salutations

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/09/2007, 13h38
  2. Réponses: 11
    Dernier message: 18/07/2007, 10h43
  3. Réponses: 6
    Dernier message: 24/07/2006, 15h22
  4. Procédure stockée : passage d'un tableau en paramètres
    Par thomas_strass dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/05/2006, 14h52
  5. [JpGraph] Passage d'un tableau en paramètre dans une URL pour JPgraph
    Par crazydiver_e2 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 16/01/2006, 16h15

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