Ressource-Sharing

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.

Wer kann mir helfen?

Dank im Voraus!

P.S.: ich Programmiere mit Visual C++ 6

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)

Klaus

Danke!

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.

Klaus