Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Datentransfer zwischen Programmen

  Alt 25. Jan 2019, 16:42
Hallo und Herzlich Willkommen in den Heiligen Hallen des Wissens und des Wahnsinns

Mit einem einfachen Delphi-Integer hat es unter 32 Bit zufällig geklappt da WPARAM bzw. LPARAM definiert ist als LONG_PTR . Unter 32 Bit sind das 4 Byte, ebenso wie ein Integer unter Delphi (Quelle).

Wenn es jetzt um einen Record geht bleibt nur die Möglichkeit einen Zeiger auf diesen Speicherbereich über den LPARAM/WPARAM auszutauschen. Leider (oder auch: Zum Glück) hast du mit deiner Vermutung
Zitat:
kann es evtl. gar nicht funktionieren, da ich zwischen 2 Programmen keinen "Speicherbereich" übergeben kann ?
Recht - Ein Prozess kann nicht einfach in den Daten eines anderen Prozesses wühlen.

Natürlich ist es möglich nun genau das zu tun, dafür scheint man etwas mit einer WM_COPYDATA-Nachricht vorher anstellen zu müssen.

Es ist sicher auch irgendwo eine Geschmacksfrage, es gibt ja so viele Möglichkeiten für Interprozesskommunikation (IPC) unter Windows. Das mit WM_COPYDATA ist eine von vielen. - Aber ich persönlich würde Kommunikation zwischen 2 Prozessen nicht über Messages machen - Es sei denn du hast ganz bestimmte Anforderungen wie super-niedrige Latenz oder super-hohen Durchsatz.

Ich persönlich kann mich nicht mehr erinnern wann ich das letzte mal IPC nicht über Sockets gemacht habe - Ein Programm hat einen Netzwerksocket offen und lauscht, das andere verbindet sich und schickt. Das ist nicht nur leichter zu debuggen, es funktioniert auch praktisch ohne Mehraufwand über Rechner- und Betriebssystemgrenzen hinweg. Aber klar, das wäre nicht so "schnell" wie blanken Speicher auszutauschen.


Hoffentlich hilft dir das ein bisschen weiter, ich habe mit WM_COPYDATA oder Shared Memory (eine weitere Möglichkeit) noch nie etwas gemacht...
  Mit Zitat antworten Zitat