Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Ohjelmien välinen kommunikointi

Sivun loppuun

nakkikorva [05.06.2005 22:52:18]

#

Mikä on tehokkain tapa välittää tietoa kahden ohjelman välillä, jotka ovat samalla koneella (windowsissa)? Tiedon täytyisi siirtyä reaaliajassa, joten tiedostojen käyttö ei oikein toimi.

rutkis [06.06.2005 09:45:48]

#

Socketilla onnistunee aika simppelisti.

nakkikorva [06.06.2005 13:08:09]

#

Onnistuneeko? Voiko socketilla päättää mille ohjelmalle tiedon lähettää, vai meneekö se vain sille, joka sen sattuu vastaanottamaan?

Metabolix [06.06.2005 13:47:29]

#

Se menee sille, jolla sattuu olemaan socket, joka kuuntelee sitä nimenomaista porttia, hyväksyy yhteyspyynnön ja vastaanottaa tiedon. Socketit ovat suhteellisen mutkikkaita laitoksia.

Pipe voi olla enemmän oikea väline, mutta niiden käytössä en osaa auttaa. Socketillakin toki onnistuu.

rutkis [07.06.2005 11:55:09]

#

COM:lla pystyy myös keskustelemaan prosessien yli, mutta vaatii perehtymistä comin sielunelämään.

WinC [07.06.2005 15:11:50]

#

Yhtenävaihtoehtona on toteuttaa se MMF:llä (Memory-Mapped File)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dngenlib/html/msdn_manamemo.asp

kooderi [07.06.2005 19:49:23]

#

rutkis kirjoitti:

COM:lla pystyy myös keskustelemaan prosessien yli, mutta vaatii perehtymistä comin sielunelämään.

COM:n käyttö ei ole järkevää jos molemmat prosessit pyörivät samassa koneessa. Oikea hyöty niistä saadaan silloin, jos pitää kommunkoida eri koneissa olevien mokkuloiden välillä.

Mutta onhan niitä tapoja: socket, pipe, jotka tulivat jo mainittua. Myös jaettu muisti, copydata, SendMessage...

sooda [07.06.2005 19:58:49]

#

Entäs DDE (Dynamic Data Exchangeko se oli)?

Meitsi [07.06.2005 20:55:38]

#

Joo sendii vaik winsockilla dataa loopbackin kautta toiselle ohjelmalle.

nakkikorva [08.06.2005 11:43:40]

#

Kiitos kaikille ehdotuksista, mutta tuo SendMessage vaikuttaa helpoimmalta. Miten saan ikkunan kahvan, kun minulla on siitä PROCESS_INFORMATION-struktuuri?

Meitsi [08.06.2005 11:47:32]

#

Ihan vaan villinä arvauksena että oisko process_information.hwnd?

nakkikorva [08.06.2005 11:56:33]

#

Ei, siinä on vain HANDLEt prosessille ja threadille ja DWORD-muotoiset id:t samoille. Mutta tajusin vasta, että toisella prosesseista ei välttämättä ole ikkunaa, joten tuo ei toimi. Voisiko joku kertoa, miten nuo piiput toimivat?

Metabolix [09.06.2005 18:24:10]

#

Win95, Win98 ja WinME eivät toimi näin, mutta uudemmat kyllä:
CreateNamedPipe
CreateFile (piipun nimellä kutsuttuna)
WriteFile, ReadFile
=> Google & MSDN :)

Ja SendMessagen tilalle löytyy PostThreadMessage.

rutkis [10.06.2005 09:46:16]

#

Ohjelmien välisessä kommunikoinnissa hwnd:n pitää olla muistaakseni HWND_BROADCAST, jotta viesti menee kaikille pyöriville prosesseille. Lähetettävän viestin id pitää olla wm_user-tyyppinen ja sen pitää olla rekisteröity ennen lähetystä RegisterWindowMessage()-funktiolla.

Tarkemmat tiedot löytyvät: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/postmessage.asp


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta