Entwickler-Ecke
Windows API - Zwischen mehreren meiner Programme Daten austauschen
recall - So 10.08.03 15:02
Titel: Zwischen mehreren meiner Programme Daten austauschen
Hallo,
Ich müsste das machen, was der Titel schon sagt :D
Nur weiss ich nicht wie (nur HDD=Langsam) :(
Also, ich habe keine Ahnung von gar nichts, aber davon jede Menge...
Für Hilfe wäre ich echt dankbar.
Viele Grüsse.
P.S.: Vielleicht ists unglücklich ausgedrückt ?
Also auf einem Rechner laufen 10 Programme von mir (können unterschiedliche oder gleiche sein). Neun davon müssen mit einem "Hauptprogramm" kommunizieren können.
Das ganze muss ab Win95 funktionieren !
AndyB - So 10.08.03 15:11
Da gibt es mehrere Möglichkeiten, die alle unter den Begriff IPC (InterProcess Communication) fallen.
Du hast die Auswahl zwischen Pipes, Shared Memory (das schnellste), WM_COPYDATA und Sockets.
Das ganze hier jetzt auasführlich zu erklären mit Beispielen würde den Zeichenplatz der Beiträge sprengen. Aber vereinzelt sind diese IPC Methoden hier im Forum bereits in irgendeiner Form aufgetaucht.
recall - So 10.08.03 15:25
Danke erstmal:
Shared Memory => lief das nicht nur bei win32 ???
Ansonsten sag doch mal, welches ich verwenden sollte ?
Es muss keine wahnsinnige Performance haben, und ich will auch nicht den ganzen Hintergrund dazu erklärt haben.
Einige details:
- ich will meistens Tabellen (max. 100 KB) übertragen, und ganz selten mal größere Dateien.
- meistens (fast immer) plaudern nur 2 Prgs gleichzeitig miteinander.
- Es muss möglich sein, dass das "Empfänger-Prg" auf eine Antwort warten kann, ohne einzufrieren.
- Und es muss ein "TimeOut" geben, oder halt eine EMessage, falls ich ein nicht mehr laufendes Prg anspreche.
Viele Grüsse.
AndyB - So 10.08.03 15:47
recall hat folgendes geschrieben: |
Shared Memory => lief das nicht nur bei win32 ??? |
Und zu welcher "Bit-Klasse" von Windows gehört deiner Meinung nach Win95 ? win64 wird es wohl nicht sein. Und wie steht es mit win16 ? Nein, das war ja Win 3.11, das win16 war. Dann gabe es für Win 3.11 noch eine 32 Bit Erweiterung. Aber die nannte sich dann Win32
s.
Zitat: |
Ansonsten sag doch mal, welches ich verwenden sollte ? |
- Pipes sind eigentlich nur für 2 Prozesse gedacht. Einer schreibt und der andere liest. Der lesende Prozess kann mit PeekNamesPipe abfragen wieviele Daten in der Pipe sind, ohne dass das Programm dabei hängen bleibt.
- Sockets kann man z. B. mit den Indy-Komponenten ansprechenen. Sie bieten auch die Möglichkeit der Kommunikation über mehrere Computer hinweg. Du brauchst dabei einen Server, der alle Clients (deine Prozesse) koordiniert sowie einen freien Port.
- Bei Shared Memory musst du persönlich eine feste Anzahl an Bytes reservieren. Also nichts für dynamische Strukturen, da du jedesmal den Speicher per Hand freigeben und einen kleineren/größeren Block reservieren musst. Den Shared Memory musst du vor Überschreibung von einem anderen deiner Prozesse schützen. Dazu brauchst du Kontrollstrukturen wie Mutexe und Semaphoren mit denen du den Schreib/Lesezugriff auf den Speicher steuerst.
- WM_COPYDATA braucht ein Formular. Diese kann auch unsichtbar sein (Classes.AllocateHWnd/Classes.DeallocateHWnd). Die Anwendung bekommt eine WM_COPYDATA Botschaft zugesandt und kann dann darauf reagieren. Der "Sender" kann mit SendMessageTimeout() die WM_COPYDATA Botschaft verschicken und bei einem Timeout darauf reagieren. WM_COPYDATA nutzt intern auch Shared Memory, nur geschieht dabei alles automatisch.
Entscheide dich nun selbst.
recall - So 10.08.03 17:35
Danke.
Werde das letzte nehmen. Wenn du Lust hast, dann kannst du mir noch was dazu schreiben (od. links ?) ?
Und:
Zitat: |
Und zu welcher "Bit-Klasse" von Windows gehört deiner Meinung nach Win95 ? |
:oops: (Wollte win64 fragen, Frage war aber saubl...)
Viele Grüsse.
Anonymous - So 10.08.03 17:42
Schau auf meiner HP einfach mal nach dem Hooktutorial. Da bespreche ich auch diverse IPC-Methoden!
recall - So 10.08.03 17:44
thx
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!