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

EDI Delphi Discussion :

[Kylix] Lancer l'execution d'un binaire depuis une appli Kyl


Sujet :

EDI Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 20
    Points : 17
    Points
    17
    Par défaut Lancer l'execution d'un binaire depuis une appli Kylix
    J'utilise Kylix 3 sur une distrib RedHat 9

    Je cherche "simplement" à lancer un binaire depuis mon application
    en Kylix (application en pascal).

    Il y a bien des fonctions comme "ShellExec" pour ceux qui codent en C, mais je ne trouve rien pour le Pascal....

    Help !

  2. #2
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut
    dans ta clause uses ajoute libc
    et ensuite c libc.system('la commade')
    mais pour moi ca marche pas car dans mon appli j'en ai besoin aussi.
    Crée une simple fiche avec un bouton et test mon code:
    unit Unit1;

    interface

    uses
    SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
    QDialogs, QStdCtrls, libc;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    { Déclarations privées }
    public
    { Déclarations publiques }
    end;
    function ToString(I:integer):string;

    var
    Form1: TForm1;

    implementation

    {$R *.xfm}

    function ToString(I:integer):string;
    var
    S:string[2];
    Begin
    Str(I,S);
    Result:=S;
    End;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    Erreur: integer;
    strErr:string[2];
    macmd:array of char;
    begin
    {macmd:=" ";}
    Erreur:=libc.system('ls'); {remplacer 'ls' par macmd }
    strErr:=ToString(Erreur);
    if Erreur <> 0 then
    ShowMessage('Erreur retourné:' + strErr);
    end;

    end.
    la vie est belle

  3. #3
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut
    Le code au dessus est bon sauf que j'utilise des lib i386-compat je n'ai pas de résultat mais en dehors de l'EDI (projet compile) je lance le Project1 et ca marche
    la vie est belle

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Yes ca works !

    Merci.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2004
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Effectivement, cela fonctionne avec l'appel libc.system, par contre le retour au programme appelant s'effectue lorsque l'appelé a fini (on a les 2 process actifs).

    Je vousdrais disposer simplement d'un programme lanceur d'une application (avec des paramètres définis dynamiquement et, dès qu'il a lancé l'application puisse se fermer (close) (équivalent de NOWAIT)

    Le tout en Pascal/Kylix (peu-être l'utilisation de spawn, mais comment y accéder en Pascal ,,).

    Avez-vous des idées ???

    Merci

  6. #6
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut
    Salut AllanMT, Essais de remplacer dans le code dejà citer la procedure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
    libc.system('ls'); {remplacer 'ls' par ce que tu veux lancer } 
    end;
    Théoriquement ca marche MAIS théoriquement tu n'as pas de retour (qui te garantit que 'ls' s'est lancé)
    Une façon plus élégante de faire ce que tu veux serais d'essayer de lancer libc.system dans le destructeur de l'appli en ignorant toutes les exceptions (mais pas top si le programme lanceur plante ).
    la vie est belle

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/03/2010, 10h33
  2. Réponses: 4
    Dernier message: 21/11/2007, 18h21
  3. Lancer un exe depuis une appli
    Par Kristian22 dans le forum Delphi
    Réponses: 3
    Dernier message: 08/12/2006, 12h43
  4. lancer une macro excel depuis une appli access
    Par LostIN dans le forum Access
    Réponses: 1
    Dernier message: 22/08/2006, 11h10
  5. Réponses: 5
    Dernier message: 11/03/2003, 11h49

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