Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Gleicher Speicherbereich für 2 Unterschiedliche Anwendungen (https://www.delphipraxis.net/5952-gleicher-speicherbereich-fuer-2-unterschiedliche-anwendungen.html)

noeblex 24. Jun 2003 15:50


Gleicher Speicherbereich für 2 Unterschiedliche Anwendungen
 
Hallo,

habe folgendes Problem: ich habe 2 Anwendungen welche auf einen gemeinsamen Speicherbereich zugreifen sollen.
Die eine Anwendung wird mit CreateProcess aus der anderen gestartet.
Der Speicher wird mit:
Handle := GloballAlloc(gmem_share,size);
m_pSp := GlobalLock(handle);
im Hauptprogramm allokiert.

Im aufzurufenden Programm wird der Speicher:
m_pSp := GlobalLock(Handle)
allokiert, wobei das Handle als Parameter über CreateProcess übergeben wird.

Wenn ich mir die StartAdressen anzeigen lasse, stimmen Sie überein.
Aber wenn ich in den einen Programm einen Wert ändere, so wird der im anderen Programm nicht geändert.

Was ist an dieser Lösung nicht richtig oder muss man es ganz anders angehen.

Vielen Dank im Vorraus :(

jbg 24. Jun 2003 16:13

GlobalAlloc stammt noch aus Win16-Bit Zeiten. Diese Funktion ist unter Win32 gleichbedeutend mit LocalAlloc. Sie reserviert also keinen Prozess übergreifenden Speicher mehr, sondern privaten Prozessspeicher.

Du musst für IPC (Inter Process Communication) Mechanismen benutzen. Hier eignet sich die Funktion der MMF bepaart mit einem Mutex.

Eine andere Möglichkeit sind NamedPipes oder Mailslots.

Luckie 24. Jun 2003 16:15

Oder du injezierst eine DLL in den anderen Prozess.

jbg 24. Jun 2003 16:32

Zitat:

Zitat von Luckie
Oder du injezierst eine DLL in den anderen Prozess.

Und wie sollen dann beide Prozesse auf den gleichen Speicher zugreifen? Die DLL läuft dann nämlich im anderen Prozess und hat nur auf dessen Speicher zugriff.

Luckie 24. Jun 2003 17:24

Hat eine DLL nicht Zugriff auf beide Speicherbereiche?

jbg 24. Jun 2003 18:04

Und wieso muss man dann sine Daten aus der Hook-Funktion per WM_COPYDATA oder MMFs, Pipes, Mailslots an die Hauptanwendung liefern?
Das macht man wohl um sein Programmierkönnen zu beweisen.

noeblex 25. Jun 2003 07:38

Hallo , erstmal vielen Dank für die Antworten habe aber noch zwei Fragen
: Was sind oder ist MMF.

Und zweitens bsteht auch die folgende Möglichkeit,
dass ich an das aufzurufende Programm einen Zeiger übergebe und mit diesen auf den Speicherbereich zugreifen kann.

Vielen Dank im Vorraus :)

jbg 25. Jun 2003 08:03

Zitat:

Zitat von noeblex
: Was sind oder ist MMF.

Memory Mapped Files. Kann auch als Shared Memory bezeichnet werden.

Zitat:

Und zweitens bsteht auch die folgende Möglichkeit,
dass ich an das aufzurufende Programm einen Zeiger übergebe und mit diesen auf den Speicherbereich zugreifen kann.
Das wird nicht funktionieren, da Prozess A und Prozess B jeweils einen anderen Adressraum haben. So entspricht z.B. Adresse C im Prozess A dem physikalischen Wert $00010000. Im Prozess B entsricht ein und dieselbe Adresse C aber dem physikalischen Wert $00060000.

Ich will hier aber keinen Kurs in Speicherverwaltung von Windows geben. Dazu gibt es gute Bücher und auch das PSDK. Also Suchtipp: "virtual memory"


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz