windows - C ++ Hvordan laver to programmer kommunikerer?

Indlæg af Hanne Mølgaard Plasc

Problem



Spørgsmål: Hvad er den bedste måde at lave to programmer på (begge kører på samme computer) kommunikerer og interagerer? (Windows, C ++)


Teoretisk situation:



  1. På en Windows-pc har jeg en 3. parts software , som du bruger til at gøre ting (som åbne/redigere/gemme filer ... det er ikke rigtig vigtigt) .Denne 3. parts software har en tilgængelig C ++ SDK , så du kan udvikle plugins til den.

  2. Jeg udvikler et separat frittstående Windows C ++-program (sandsynligvis ved hjælp af Qt) med en GUI. Dette program er lavet til at køre på den samme Windows-computer som 3. parts software. Dette program ville fungere som en fjernbetjening eller afsender.

  3. Ved hjælp af SDK'en til tredjeparts software udvikler jeg et lille plugin til 3. parts software . Dette program fungerer som en modtager, så min Qt GUI kan send kommandoer, som dette plugin ville modtage og dermed fjernstyr tredjeparts software i overensstemmelse hermed .



Så for et grundlæggende eksempel kunne jeg trykke på en knap på min standalone GUI, der ville kommunikere med plugin'et, der så ville åbne en bestemt fil i 3rd party software.


Hvad jeg egentlig søger efter er at udvikle standalone software, der ville kommunikere frem og tilbage med et plugin, som jeg ville udvikle til 3rd party software.


Hvad er den bedste tilgang til dette? Jeg har virkelig ingen anelse om hvor man skal starte eller hvad man skal se på. Er der almindelige C ++ biblioteker, der gør denne type ting nem?


Jeg er relativt ny til C ++ og meget ny til Qt, så prøv at uddybe. Lad være med at sige 'Brug Shared Memory' eller sådan noget, fordi jeg ikke forstår præcis, hvad du snakker om.


Programmet ville IKKE blive kørt på en separat computer, så der er ikke noget netværksspørgsmål her, jeg tror ikke.


Nogle spørgsmål jeg tænkte på:



  1. Hvad hvis brugeren har flere kopier af 3. parts software åbent på samme tid. Hvordan kan min standalone software vide, hvilken en at kommunikere med?

  2. Hvis plugin'en på en eller anden måde skal registrere eller finde min selvstændige software til at kommunikere med den?

  3. Hvis jeg allerede har 3rd party-softwaren kørende og så åbner min standalone software, skal den scanne for plugin'en for at se, om den kører, eller hvordan finder den den?



Enhver hjælp ville blive meget værdsat. Jeg har lavet en søgning på emnet på SO, men jeg kunne ikke se mange spørgsmål til C ++ specifikt, og de fleste af dem havde ikke mange svar eller var ikke meget klare eller henvender sig ikke specifikt til softwarekommunikation med et plugin til et tredjepartsprogram.

Bedste reference


der er mange løsninger med mange fordele og ulemper. du bliver nødt til at gøre lidt læsning på hver for at arbejde ud, som er bedst for dig. ingen løsning er bedst for alle


her er et godt startsted http://msdn.microsoft.com/en-us/library/aa365574(v=vs.85).aspx[1]

Andre referencer 1


Ærligvis vil jeg højst sandsynligt tage den netværksbaserede tilgang. Det afkobler den enkeltstående software og plugin'en og som sådan kan du nemt koble dit plugin til et vilkårligt antal andre hjælpeprogrammer eller -skrifter, så længe kommunikationsprotokollen matcher.


Derfor udvikler jeg sandsynligvis plugin'et til at fungere som en server, modtager kommandoer og svarer med statuser (hej, du kan endda følge HTTP-standarden, hvis du virkelig vil);).


Og hvis du nogensinde ville gøre kommunikation på tværs af maskinen, kommer den gratis :)


Selvfølgelig afhænger jeg af softwaren og brugen, at jeg 'd krypterer kommunikationen.

Andre referencer 2


Hvis du bruger Qt, tror jeg, at den har begrebet plugin: Sådan oprettes Qt-plugins [2]


Ellers fungerer COM fint. Med C ++ ville jeg bruge ATL biblioteket, men der er også COM support i Qt.


Hvis du vil gå mere lavt niveau, ville jeg bruge stikkontakter eller navngivne rørledninger (siden du arbejder med Windows)

Andre referencer 3


Jeg går til stikkontakter for at etablere en kommunikation mellem din fjernbetjeningsapplikation og serverapp.


Du finder mange og mange oplysninger ved at søge disse søgeord her på SO: IPC, RPC, sockets.