001
30.07.2002, 17:47 Uhr
~Pepe
Gast
|
Hallo, alle neueren Betriebssystem laufen im sogenannten Protected Mode. D.h. unter anderem, dass jeder Prozess (jedes Programm) seinen eigenen virtuellen Adressraum hat. Die realen Adressen werden dann erst von der CPU/dem Betriebssystem errechnet. Das Ganze hat die Folge, dass wenn zwei unterschiedliche Prozesse an der gleichen Speicheradresse lesen völlig verschiedene Werte herauskommen, da es sich nach der Umrechnung auch um verschiedene reale Adressen handelt. Häufig verbietet das OS dem Prozess sogar den Zugriff auf viele Speicheradressen. Ein Ausnahmefehler wäre z.B. unter Windows die Folge. ("Prozess XZ hat versucht von $1234 zu lesen", darf er aber nicht!)
Lange Rede kurzer Sinn: Pointer kann man zwar mitsenden, da Pointer eigentlich auch nur 32-Bit-Integer-Werte sind. void *p; int i; i = (int)p; sollte funktionieren! Aber der Prozess der die den Pointer empfängt kann mit diesem herzlich wenig anfangen.
Bei Prozessen mit gleichen Adressraum wie z.B. einem Programm und einer geladenen DLL gilt das ganze nicht. Hier gelten die Pointer für alles. Dazu ist dann aber auch keine Interprozesskommunikation notwendig, da das Programm einfach DLL-Routinen aufrufen kann.
Was dir vielleicht weiterhilft ist Shared Memory. Das sind von mehreren Prozessen gemeinsam genutzte Adressbereiche. Shared Memory gibt es aber unter Win9x nicht sondern wird über Auslagerungsdateien simuliert. Der Vorteil von Shared Memory, die hohe Geschwindigkeit des Datenaustauschen zwischen Programmen geht dabei verloren. Unter Linux, Win 2000, Win XP sollte Shared Memory Implementiert sein. So ganz sicher bin ich da aber auch nicht!
Gruß Pepe
Ich hoffe ich konnte helfen! |