AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Gleicher Speicherbereich für 2 Unterschiedliche Anwendungen
Thema durchsuchen
Ansicht
Themen-Optionen

Gleicher Speicherbereich für 2 Unterschiedliche Anwendungen

Ein Thema von noeblex · begonnen am 24. Jun 2003 · letzter Beitrag vom 25. Jun 2003
Antwort Antwort
noeblex

Registriert seit: 24. Jun 2003
5 Beiträge
 
#1

Gleicher Speicherbereich für 2 Unterschiedliche Anwendungen

  Alt 24. Jun 2003, 15:50
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
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 24. Jun 2003, 16:15
Oder du injezierst eine DLL in den anderen Prozess.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4
  Alt 24. Jun 2003, 16:32
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 24. Jun 2003, 17:24
Hat eine DLL nicht Zugriff auf beide Speicherbereiche?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6
  Alt 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.
  Mit Zitat antworten Zitat
noeblex

Registriert seit: 24. Jun 2003
5 Beiträge
 
#7
  Alt 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
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8
  Alt 25. Jun 2003, 08:03
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"
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz