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 :

Primives IPC sur Firemonkey


Sujet :

Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Primives IPC sur Firemonkey
    Bonjour,

    Y a-t-il un moyen d'utiliser les primitives IPC (Inter Processus Communication) avec FireMonkey en cross-compilation ? Un code portable serait le bienvenu. En C++, aucun problème mais comme Builder ne gère pas Linux...

    Bon bref, comment empêche-t-on le lancement de 2 instances d'un même programme sous FMX aussi bien en Windows, qu'en OS 10 (si si ! on peut lancer 2 instances facilement), et évidemment Linux.

    Merci d'avance.
    Bonnes fêtes. Cordialement. Gilles
    Dernière modification par Invité ; 26/12/2018 à 20h35.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 667
    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 667
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Comme il s'agit de trucs spécifiques à chaque OS un seul code portable ne va pas être possible.
    Le principe : faire la liste des applications lancées et vérifier si la dite application est déjà présente.

    trouvé sur le net https://delphiscience.wordpress.com/...ndows-and-osx/ , aucune réponse sur Linux ou Android mais le principe doit être le même. Si je peux critiquer la solution Windows, je dirai que l'auteur pour garder une similarité a voulu appliquer le même principe que pour OSX mais est-ce vraiment nécessaire, perso pour obtenir cette liste sous windows je serai passé par WMI (Win32_Process)

    Bonnes fêtes de fin d'année

    Serge

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour Linux, je pourrais m'inspirer de cet article. Mais comment entre-t-on dans la programmation Linux avec FireMonkey ? Comment s'appellent les unités de FMX spécialisées Unix si elles existent ? Et dans ce cas, que permettent-elles d'atteindre ou de remplacer dans les "APIs" Linux ? Cela se limite à DataSnap ?

    C'est l'énorme problème de la cross-compilation. Si ce n'est pas prévu,... c'est foutu ou du moins c'est très compliqué. Alors que si l'IDE fonctionne sur chaque OS avec un compilateur propre à l'OS qui permet donc de faire "ce que permet" l'OS, cela me semble plus facile. Enfin j'en suis là dans mes réflexions au point que je n'ai pas installé le Rio sur mon deuxième poste d'autant que cela devient risible au niveau de la configuration :

    un Mac mini avec un dual boot
    • Windows + Virtual Box et Ubuntu (client)
    • Mac OS X + VirtualBox et Windows (client)

    Faire "tourner" FireMonkey pour les 3 cilbles Desktop c'est un véritable tour de passe-passe pour garder des performances acceptables au niveau du matériel.

    Dans mon étude, je crois arriver au bout de ma confrontation Delphi/C++. Je vais devoir tourner la page pour le développement Desktop par KO technique.
    Mais il me reste FireMonkey vs Windev Mobile pour le développement mobile

    Cordialement. Gilles
    Dernière modification par Invité ; 27/12/2018 à 14h01.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il semble qu'il existe l'unité Posix....

  5. #5
    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
    Bonsoir Gilles

    Tu trouveras une partie de la réponse pour les unités sur cet article de Marco Cantù
    http://blog.marcocantu.com/blog/2017...rtl-units.html

    Concernant FireMonkey sous Linux, comme il n'est pas fourni, il faut voir avec la doc de FMXLinux, mais d'une manière générale, comme pour les autres plateformes, on doit jouer avec les API et fonctionnalités de l'OS, notamment la liste des processus et leurs noms pour empêcher plusieurs lancement du même programme.

    Le seul truc qui pose vraiment problème c'est le fait de vouloir transmettre les paramètres de l'instance qu'on lance à celle qui fonctionne déjà.

  6. #6
    Membre émérite Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 191
    Par défaut
    Citation Envoyé par Selzig Voir le message
    Bonjour,

    Y a-t-il un moyen d'utiliser les primitives IPC (Inter Processus Communication) avec FireMonkey en cross-compilation ? Un code portable serait le bienvenu. En C++, aucun problème mais comme Builder ne gère pas Linux...

    Bon bref, comment empêche-t-on le lancement de 2 instances d'un même programme sous FMX aussi bien en Windows, qu'en OS 10 (si si ! on peut lancer 2 instances facilement), et évidemment Linux.

    Merci d'avance.
    Bonnes fêtes. Cordialement. Gilles
    On peut surement utiliser les IPC en cross-compilation avec Delphi
    Je l'ai déjà fait avec Code Typhon sur arm-linux (Merci aux auteurs de SimpleIPC-Lib)

    La librairie SimpleIPC fournie avec Lazarus est aussi prévue pour être compilée avec Delphi voir ici : https://github.com/z505/SimpleIPC-lib

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    @pprem : merci beaucoup ! CE que je cherchais. Comme j'étais loin de mon poste principal où Delphi est installé et que je n'ai pas encore installé Rio sur mon 2ème poste, je n'avais pas les sources et sans les sources... point de salut. Je trouvais le doc Lazarus "pauvre" mais en réalité je ne connaissais pas celle de FireMonkey ! Je retire mes critiques concernant Lazarus/FPC. Je vais peut-être finir pas y revenir. Non c'est une blague : il y a trop retard dans l'OS le plus "faible", OS X.

    Mais je réitère mes propos : dès qu'on veut un peu sortir des chemins battus, que l'on a besoin de connaître les ressources dont on dispose avec FMX, il est impossible de les connaître. Nom de nom ! Un programme cela se commente, encore plus un IDE ou un compilateur.

    @sergio_is_back : oui avec Lazarus, c'est à dire en réalité avec Free Pascal, il est effectivement possible de résoudre le problème. Il y a même un composant, UniqueInstance qui fonctionne correctement au moins dans 2 OS (Windows et Linux). Il existe des portages pour Delphi, mais ceux que j'ai trouvés nécessitent WinApi et donc ne sont pas compatibles Linux et OS X. Voila pourquoi je cherchais les "primitives" Linux intégrées dans FMX. Il en faut au moins quelques unes pour porter le composant sous Nux et sous Mac. Et être exhaustif sur les classes, les méthodes et les variables dont on dispose pour faire ce travail est une nécessité.

    Donc cela va avancer... doucement de manière chaotique comme d'habitude avec FireMonkey, après de provisoires renoncements, et grâce à ce forum. L'argument d'utiliser RAD Embarcadero pour développer plus vite que C++ est une plaisanterie. Le résultat obtenu en général n'en est pas une, je l'admets volontiers, mais que de tensions pour l'obtenir ! J'ai fait le même travail (portage) très rapidement en C++ pour les 3 OS. Mais quand on aime... Mais pourquoi je suis tombé dans le Pascal quand j'étais petit ?

    J'informerai de mon avancement... mais de toute façon vous me "lirez râler" comme d'habitude.

    Merci beaucoup pour l'aide apportée. Cordialement. Gilles

  8. #8
    Membre émérite Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 191
    Par défaut
    Citation Envoyé par Selzig Voir le message
    @sergio_is_back : oui avec Lazarus, c'est à dire en réalité avec Free Pascal, il est effectivement possible de résoudre le problème. Il y a même un composant, UniqueInstance qui fonctionne correctement au moins dans 2 OS (Windows et Linux). Il existe des portages pour Delphi, mais ceux que j'ai trouvés nécessitent WinApi et donc ne sont pas compatibles Linux et OS X. Voila pourquoi je cherchais les "primitives" Linux intégrées dans FMX. Il en faut au moins quelques unes pour porter le composant sous Nux et sous Mac. Et être exhaustif sur les classes, les méthodes et les variables dont on dispose pour faire ce travail est une nécessité.

    Merci beaucoup pour l'aide apportée. Cordialement. Gilles
    Non tu ne pas lu correctement : si tu compile pour Linux la librairie SimpleIPC-Lib n'utilisera pas la WinAPI ! Le code est multi-plateforme
    C'est à toi de placer tes directives de compilation correctement, regarde bien le code, il faut placer une directive UNIX lorsque tu compile pour Linux

    Une autre solution plus simple et qui marche partout : Utiliser une socket UDP sur la boucle locale 127.0.0.1 (ou ::1 en IPv6) (je m'en sert très souvent)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Rebonjour,

    Pour la librairie, effectivement je n'ai pas vu le code tout simplement parce que je n'utilise pas de librairies. Le but est un all-in-one, ce qui impose par exemple d'utiliser UniDac sous Delphi ou Lazarus. Donc le portage d'une librairie dans le code du projet est certainement faisable mais je ne pratique pas. Je parlais de IPC de FP (ipc.pp et ipc.inc) et des exemples fournis ipcserver.lpi et ipclient.lpi qui nécessitent simpleipc.inc dont j'extrais un peu de code
    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
       See the file COPYING.FPC, included in this distribution,
        for details about the copyright.
     
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     
     **********************************************************************}
     
    uses Windows,messages;
     
    const
      MsgWndClassName: WideString = 'FPCMsgWindowCls';
     
    resourcestring
      SErrFailedToRegisterWindowClass = 'Failed to register message window class';
      SErrFailedToCreateWindow = 'Failed to create message window %s';
    Pas de directives de compilation... C'est pour Windows...
    L'UDP... en dernier ressort alors.

    Cordialement. Gilles

  10. #10
    Membre émérite Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 191
    Par défaut
    Citation Envoyé par Selzig Voir le message
    Rebonjour,

    Pas de directives de compilation... C'est pour Windows...
    L'UDP... en dernier ressort alors.

    Cordialement. Gilles
    Non je l'utilise sous Code Typhon en cross-compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    {$mode objfpc}{$H+}
    
    uses
        {$IFDEF UNIX}
        cthreads,
        baseunix,
        {$ENDIF}
        Classes, SysUtils, FileUtil, DateUtils, CustApp, IniFiles, SyncObjs, Process, zipper,
        SimpleIPC,
        colibri, threads, logfile, sqlite, common, damona, mysql;
    
    type TPowerMode = (pmNormal,pmSaveMode,pmShutdown);
    Et dans l'entête de SimpleIPC y'a pas de référence à l'API Windows :

    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
     
    {
        This file is part of the Free Component library.
        Copyright (c) 2005 by Michael Van Canneyt, member of
        the Free Pascal development team
     
        Unit implementing one-way IPC between 2 processes
     
        See the file COPYING.FPC, included in this distribution,
        for details about the copyright.
     
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     
     **********************************************************************}
    unit simpleipc;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Contnrs, SyncObjs, Classes, SysUtils;
     
    const
      MsgVersion = 1;
     
      { IPC message types }
      mtUnknown = 0;
      mtString = 1;
     
    type
      TIPCMessageOverflowAction = (ipcmoaNone, ipcmoaDiscardOld, ipcmoaDiscardNew, ipcmoaError);
    Je dis pas que c'est facile à adapter à Delphi mais de mon point de vue y'a pas de problème pour cela soit possible

    J'ai déjà testé sous CodeTyphon ça fonctionne sous Windows, sous Linux et sous arm-linux

    Peut être que le lien que je t'ai passé n'est pas a jour, va voir du coté de FreePascal

    Perso j'utilise aussi avec Delphi du code issu des librairies FreePascal et c'est une vraie mine d'or, faut pas s'en priver

  11. #11
    Invité
    Invité(e)
    Par défaut
    OK, je charge des sources à jour de Lazarus/FPC et regarde ce que l'on peut en faire.
    Merci.

Discussions similaires

  1. Copier des bitmap avec DrawBitMap sur FireMonkey
    Par ninaleo dans le forum Langage
    Réponses: 1
    Dernier message: 03/05/2015, 02h35
  2. Vidéo sur FireMonkey
    Par yvslms dans le forum Composants FMX
    Réponses: 1
    Dernier message: 10/05/2012, 17h23
  3. Sécurité des données sur un IPC industriel.
    Par gomezmic dans le forum Sécurité
    Réponses: 1
    Dernier message: 04/02/2010, 09h26
  4. Réponses: 4
    Dernier message: 11/09/2009, 09h50

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