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 :

Échange entre deux applications graphiques


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Échange entre deux applications graphiques
    Bonjour à toutes et à tous,

    Pour faire suite à cette discussion, je veux échanger entre deux applications graphiques en utilisant les composants "SimpleIPC Server et Client".

    J'ai réussi à faire cet échange si je lance séparément chacune des applications A et B.

    Maintenant, l'application A qui doit recevoir des données de B lance l'application B via un TProcess. Et bien, cela ne fonctionne plus.

    L'application A (Le serveur est lancé dans le Create):

    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
    procedure TFntrBase.SimpleIPCServerMessage(Sender: TObject);
    var
      s: String;
    begin
      s:= SimpleIPCServer.StringMessage; // Réception du message de B
    end;
    
    procedure TFntrBase.ScruteClickTimer(Sender: TObject);
    var
      Proc: TProcess;
    begin
    ...
      begin
        try
          Proc := TProcess.Create(nil);
          Proc.Options:= Proc.Options+[poWaitOnExit];
          Proc.Executable := 'C:\lazarus124\Projets_ChP\ConcatMap\CoordPoint\CoordPoint.exe'; // L'application B
          Proc.Execute();
        finally
          Proc.Destroy;
        end;
      end;
    end;
    L'application B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.ValiderClick(Sender: TObject);
    begin
      with SimpleIPCClient do
      begin
        Connect;
        SimpleIPCClient.SendStringMessage(FloatToStr(Lat)+';'+ FloatToStr(Lon));
        DisConnect;
      end;
      Application.Terminate;
    end;
    Une idée du pourquoi du comment ?

    Cordialement.

    Pierre

  2. #2
    Membre chevronné

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Par défaut
    Est-ce que exactement les mêmes applications fonctionnent si le lancement est réalisé manuellement ? Il pourrait notamment y avoir un souci concernant un des paramètres (Global, ServerID, etc ...)

    Par ailleurs (et bien qu'il semble qu'il n'y ait pas tout votre code), l'évènement OnMessage du serveur n'est pas activé automatiquement à la réception du message (cf. https://www.freepascal.org/docs-html...onmessage.html). Il faut avoir demandé la lecture d'un message (PeekMessage, ReadMessage) et qu'un tel message existe: lors de l'activation d'un évènement OnMessageQueued, ou dans un Timer ou une boucle d'exécution, etc ...



    PS1: il 2 fois SimpleIPCClient pour SendStringMessage ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      with SimpleIPCClient do
      begin
        Connect;
        SimpleIPCClient.SendStringMessage(FloatToStr(Lat)+';'+ FloatToStr(Lon));
        DisConnect;
      end;
    PS2. Utiliser Connect/Disconnect avant chaque envoie de message n'est pertinent que s'il n'y a qu'un seul message à envoyer, ou éventuellement que les messages sont envoyés très épisodiquement. Sinon, il vaut mieux ne les faire qu'une seule fois dans l'application (éventuellement en testant la connexion avant l'envoi, pour le connect par exemple, et lors de la fin de l'application pour le disconnect, par exemple).


    *** EDIT ***
    Je pense que votre problème vient en fait de l'option "poWaitOnExit" de votre TProcess. Elle empêche toute autre action au niveau du serveur; notamment la réception et le traitement du message Windows WM_CopyData indiquant la réception d'un message en provenance du client.

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    J'ai oublié de donner le lien de la précédente discussion

    Vous trouverez un fichier zip d'une petite application que j'ai trouvée sur le WEB qui est un exemple d'utilisation SimpleIPC.

    • Exécution sous Windows XP : le bouton SendMessage a une action et le bouton PeekMessage n'a aucune action.
    • Exécution sous Linux : le bouton SendMessage n'a aucune action et le bouton PeekMessage en a une.

    Donc deux modes de fonctionnement selon l'OS ??

    Si par ailleurs, je lance l'application Client par un TProcess, le fonctionnement est encore différent. Si de plus, j'utilise un TProcessEX, le fonctionnement est encore autre !!

    Y aurait-il un fonctionnement unifié ?

    Cordialement.

    Pierre
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip l.zip (2,3 Ko, 60 affichages)

  4. #4
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Bonjour Pierre,

    je viens tout juste de finir un petit test j'ai vraiment galérer mais ça fonctionne avec Windows 10 (je n'ai donc pas tester ton zip)

    testICP.zip

    Bonne journée
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par FChrisF Voir le message

    *** EDIT ***
    Je pense que votre problème vient en fait de l'option "poWaitOnExit" de votre TProcess. Elle empêche toute autre action au niveau du serveur; notamment la réception et le traitement du message Windows WM_CopyData indiquant la réception d'un message en provenance du client.
    C'est effectivement ça avec le TProcess avec des options vide cela fonctionne
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  6. #6
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Dans le petit exemple que j'ai joint, il n'y a pas de TProcess, il n'y a qu'un seul programme.

    Pourtant, les comportements sont différents selon L'OS.

    Cordialement.

    Pierre

  7. #7
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Dans le petit exemple que j'ai joint, il n'y a pas de TProcess, il n'y a qu'un seul programme.

    Pourtant, les comportements sont différents selon L'OS.

    Cordialement.

    Pierre
    Ok je vais tester car cela m'intrigue. Et je n'ai pas encore tester mon exemple sous linux en plus
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  8. #8
    Membre Expert
    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
    Billets dans le blog
    2
    Par défaut
    De retour... Sous Linux, mon exemple fonctionne parfaitement

    Une seule chose : avant d'ouvrir le projet client dans Lazarus, il faut éditer le fichier lfm et changer la propriété Active du composant TSimpleICPClient à false, sinon cela fait boguer l'EDI sauf si le serveur est en fonctionnement.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

Discussions similaires

  1. Echange d'objet java entre deux applications
    Par m3allem001 dans le forum Langage
    Réponses: 3
    Dernier message: 03/04/2009, 13h20
  2. Lien entre deux applications
    Par zchallal dans le forum C++Builder
    Réponses: 17
    Dernier message: 03/05/2006, 00h02
  3. Liens entre deux applications
    Par Plawi dans le forum MFC
    Réponses: 3
    Dernier message: 14/03/2006, 23h01
  4. Relation entre deux application
    Par tk_dlph dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 28/11/2005, 09h27
  5. Réponses: 6
    Dernier message: 09/04/2005, 11h20

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