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...