11
votes

C ++ Comment faire de deux programmes communiquer?

Question: quelle est la meilleure façon de faire deux programmes (à la fois en cours d'exécution sur le même ordinateur) communiquer et interagir? (Windows, C ++)

Situation théorique:

  1. sur un PC Windows, j'ai un logiciel 3rd Party que vous utilisez pour faire des trucs (comme Ouvrir / Edition / Save Files ... ce n'est pas vraiment important). Ce logiciel 3ème partie a un C ++ SDK afin que vous puissiez développer des plugins pour cela.

  2. Je développe un programme distinct STANDALONE Windows C ++ (probablement utilisant QT) avec une interface graphique. Ce programme est effectué pour exécuter sur le même ordinateur Windows que le logiciel tiers. Ce programme agirait comme une télécommande ou expéditeur.

  3. Utilisation du SDK du logiciel tiers, je développe un petit plugin pour le logiciel 3rd Party . Ce programme agit en tant que récepteur, de sorte que mon interface graphique QT puisse envoyer des commandes que ce plugin recevrait et donc télécommande le logiciel tiers en conséquence .

    Donc, pour un exemple de base, je pourrais appuyer sur un bouton de mon interface graphique autonome qui communiquerait avec le plugin qui ouvrirait ensuite un fichier spécifié dans le 3ème logiciel.

    Ce que je cherche essentiellement est de développer un logiciel autonome qui communiquerait avec un plugin que je développerais pour le logiciel tiers.

    Quelle est la meilleure approche de cela? Je n'ai vraiment aucun indice où commencer ou quoi regarder. Existe-t-il des bibliothèques courantes C ++ qui rendent ce type de chose facile?

    Je suis relativement nouveau à C ++ et très nouveau à Qt, essayez donc d'élaborer. S'il vous plaît ne dites pas simplement «utiliser une mémoire partagée» ou quelque chose comme cette cause, je ne saurai pas exactement de quoi vous parlez.

    Le programme ne serait pas exécuté sur un ordinateur séparé, il n'est donc donc nécessaire que je ne pense pas ici.

    Quelques questions que je pensais:

    1. Et si l'utilisateur dispose de plusieurs copies du logiciel tiers ouvert en même temps. Comment mon logiciel autonome connaît-il lequel communiquer avec?

    2. Si j'ai déjà mon logiciel autonome et ouvrez le logiciel 3ème partie, le plug-in doit-il en quelque sorte enregistrer ou trouver mon logiciel autonome pour communiquer avec elle?

    3. Si j'ai déjà le logiciel 3ème partie exécutant puis ouvrez mon logiciel autonome, il doit qu'il doit numériser pour le plugin pour voir si son exécution ou comment le trouve-t-il?

      Toute aide serait grandement appréciée. J'ai effectué une fouille sur le sujet, mais n'a pas vu de nombreuses questions pour C ++ spécifiquement et la plupart d'entre eux n'avaient pas beaucoup de réponses ou n'étaient pas très claires ou ne faisaient pas spécifiquement référence à la communication logicielle avec un plugin pour un programme tiers.


0 commentaires

4 Réponses :


1
votes

Honnêtement, je prendrais probablement l'approche basée sur le réseau. Il découle le logiciel autonome et le plugin et, en tant que tel, vous pouvez facilement accrocher votre plugin dans n'importe quel nombre d'autres programmes ou scripts utilitaires tant que les correspondances du protocole de communication.

Donc, je développerais probablement le plugin pour agir en tant que serveur, recevoir des commandes et répondre avec des statuts (hé, vous pouvez même suivre la norme HTTP si vous le souhaitez vraiment;)).

et si vous avez toujours voulu faire une communication croisée, il vient gratuitement :)

Bien sûr, en fonction du logiciel et de l'utilisation, je chiffrerais la communication.


0 commentaires

4
votes

Il existe de nombreuses solutions avec de nombreux avantages et inconvénients. Vous devrez faire une lecture sur chacun pour travailler le mieux pour vous. Aucune solution n'est meilleure pour tout le monde

Voici une bonne place de départ http: / /msdn.microsoft.com/en-us/Library/aa365574(v=vs.85).aspx


0 commentaires

0
votes

J'irais pour les sockets pour établir une communication entre votre application de contrôle à distance et l'application Server.

Vous trouverez des lots et beaucoup d'informations en recherchant ces mots-clés ici sur: IPC , , sockets .


0 commentaires

1
votes

Si vous utilisez qt, je pense qu'il a la notion de plugin: Comment créer des plugins QT

Sinon, com fonctionne bien. Avec C ++, j'utiliserais la bibliothèque ATL, mais il existe également un support COM dans Qt.

Si vous voulez aller plus bas niveau, j'utiliserais des sockets ou des tuyaux nommés (puisque vous travaillez avec Windows)


1 commentaires

@Jakobud - Votre question est très longue, d'où mon malentendu. Si la relation entre les deux programmes est structurée et riche (comme à l'aide d'un modèle d'objet), j'utiliserais com. Si c'est simple (aka: scénarios de données de lecture / écriture), j'utiliserais des tuyaux ou des sockets nommés.