Ich versuche von verschiedenen Programmen aus auf ein und die selbe Speicherstelle (mittels Pointern) zuzugreifen.
Die Pointer in beiden Programmen sind auf die selbe Adresse gerichtet, trotzdem kann das zweite Programm die Ressourcen, die das erste Programm geschrieben hat nicht auslesen.
Ich versuche von verschiedenen Programmen aus auf ein und die
selbe Speicherstelle (mittels Pointern) zuzugreifen.
Die Pointer in beiden Programmen sind auf die selbe Adresse
gerichtet, trotzdem kann das zweite Programm die Ressourcen,
die das erste Programm geschrieben hat nicht auslesen.
Zwar ist es die gleichen Adresse, aber jeder Prozess hat seinen eigenen virtuellen Adressraum. Sowas funktioniert nur mit sog. Shared-Memory.
siehe Doku unter:
CreateFile
CreateFileMapping
OpenFileMapping
MapViewOfFileEx
(lass Dich durch das ‚File‘ nicht verwirren)
Ich komm damit leider nur nicht ganz klar. Wie setzte ich den von der Funktion geforderten HANDLE auf meine Datenstruktur, um sie vom anderen Programm aus zugänglich zu machen. (Meine Struktur ist eine verkettete Liste.
Ich komm damit leider nur nicht ganz klar. Wie setzte ich den
von der Funktion geforderten HANDLE auf meine Datenstruktur,
um sie vom anderen Programm aus zugänglich zu machen. (Meine
Struktur ist eine verkettete Liste.
Dafür ist der folgende Aufruf zuständig
shmObj = lpMapAddress = MapViewOfFileEx(
hMapFile, // file-mapping object to map into address space
fdwAccess, // access mode
dwOffsetHigh, // high-order 32 bits of file offset
dwOffsetLow, // low-order 32 bits of file offset
cbMap, // number of bytes to map
basemem // Anfangsadresse des gewuenschten Speichers
);
Prinzip:
Prozess A legt shared Mem an und „mapped“ einen Speicherbereich mit einer Basisadresse
Process B öffnet das Handle (named) dieses Bereichs und erzeugt sich ebenfalls ein „Mapping“.
Jetzt kann Du den Speicher benutzen um z.B. via Placement-new Deine Objekte darin anzulegen bzw. Pointer auf darin enthaltene Strukturen zu setzen.
In jedem Fall solltest Du Dir die Doku zu den vorhin genannten Methoden anschauen. Beispiele gibt es da übrigens auch.