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 :

prolog dans une appli delphi : versions de SWI-prolog --> souci exécutable ?


Sujet :

Langage Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut prolog dans une appli delphi : versions de SWI-prolog --> souci exécutable ?
    Bonsoir,

    Je ne sais pas si le titre à ralonge apparaîtra en entier...

    Je travaille sur une application delphi qui utilise un système à base de connaissances en prolog avec lequel elle communique aux moyens de fichiers texte.
    C'est SWI prolog qui est utilisé pour générer le code prolog et des exécutables prolog auxquels fait appel delphi. Voici, le code prolog pour générer l'exécutable (de tête, c'est peut-être pas exact) :
    qsave_program('nomExe', [goal=nomPredicat(nomsParams)]).
    Si j'ai bien compris, le lancement de l'exécutable 'nomExe' par delphi fait que celui-ci demande la requête nomPredicat(nomsParams) à prolog.

    J'utilise actuellement une version de SWI prolog différente de la (des ?)version(s) utilisée(s) par les précédents développeurs sur ce projet et j'ai un problème lorsque je re-compile l'exécutable prolog après modifications des fichiers prolog (j'ai bien pris garde de copier les dll correspondant à la version de SWI-prolog que j'utilise dans le répertoire où je compile).

    Le problème que j'ai avec le nouvel exécutable compilé, c'est qu'il ne se ferme pas alors que la dernière prémisse du but nomPredicat(nomsParams) demandé à prolog lors de l'appel à l'exécutable est 'halt' et que si je lance à la main toutes les prémisses du but nomPredicat(nomsParams), je ne rencontre aucun souci (je suis loin de m'y connaître en prolog, disons que prolog ne tourne pas indéfiniment et m'écrit "yes" 1 seconde après que j'ai lancé ma requête).

    Est-ce que quelqu'un sait si le fait de changer de version de SWI-prolog peut-être un problème ? si oui, comment le résoudre (comme je l'ai dit, j'ai copié les dll nécessaires dans le même répertoire que les sources avant la compilation de l'exécutable) ?

    Si ça inspire quelqu'un...
    Désolée pour le vocabulaire approximatif à propos de prolog

    Laurence

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Peux-tu préciser la façon dont le code Delphi lance les exécutables Prolog?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Voici le code de la procédure lancement qui lance l'exécutable prolog.
    Ca c'était déjà fait avant que j'arrive, je n'y ai pas touché depuis.

    Dans les paramètres, on passe l'exécutable 'Executable' à lancer et le répertoire 'DirProlog' où il se trouve.

    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
     
    procedure lancement(DirProlog,Executable : string);
    // Cette fonction permet le lancement du programme Prolog
    // la fonction attend la terminaison du programme Prolog
    var
      SEInfo: TShellExecuteInfo;
      ExitCode: DWORD;
    begin
         FillChar(SEInfo, SizeOf(SEInfo), 0);
         SEInfo.cbSize := SizeOf(TShellExecuteInfo);
     
         with SEInfo do begin
              // permet d'attendre la terminaison du programme
              fMask := SEE_MASK_NOCLOSEPROCESS;
              Wnd := Application.Handle;
              lpFile := PChar(Executable);
     
              // répertoire de travail (semble ne pas marcher)
                lpDirectory := PChar(DirProlog);
              // permet de ne pas voir l'ouverture du programme Prolog
              // pour voir l'ouverture de la fenêtre faire
              // nShow := SW_SHOWNORMAL
              nShow := SW_HIDE;
         end;
         if ShellExecuteEx(@SEInfo) then begin
     
         // attente de la terminaison du programme
         repeat
               Application.ProcessMessages;
               GetExitCodeProcess(SEInfo.hProcess, ExitCode);
         until (ExitCode <> STILL_ACTIVE) or
               Application.Terminated;
         end;
    end;

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Petite précision : il y a d'autres exécutables lancés de la même manière dans le logiciel, et il n'y a pas ce même problème : ils se ferment (prémisse halt aussi).

Discussions similaires

  1. Inclure un fichier *.lb dans une Appli DELPHI
    Par colorid dans le forum Langage
    Réponses: 3
    Dernier message: 27/09/2011, 14h15
  2. Problème utilisation Dll créée en delphi dans une appli VB6
    Par Djelangelo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/01/2011, 15h48
  3. Réponses: 4
    Dernier message: 12/04/2007, 20h26
  4. Mappoint dans une appli delphi
    Par maxclo dans le forum Delphi
    Réponses: 2
    Dernier message: 31/10/2006, 16h40
  5. Utilisateurs d'une appli delphi+paradox
    Par Jacques Deyrieux dans le forum Paradox
    Réponses: 2
    Dernier message: 11/12/2002, 18h41

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