AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi MemoryMappedFile Problem im Debugger-Modus
Thema durchsuchen
Ansicht
Themen-Optionen

MemoryMappedFile Problem im Debugger-Modus

Ein Thema von edmu · begonnen am 16. Okt 2009 · letzter Beitrag vom 16. Okt 2009
Antwort Antwort
edmu

Registriert seit: 27. Jul 2004
41 Beiträge
 
#1

MemoryMappedFile Problem im Debugger-Modus

  Alt 16. Okt 2009, 06:36
Hallo

ich habe ein Problem mit den MemoryMappedFiles.

Ich möchte einen Datenaustausch zwischen 2 Programmen mit MMF machen und funktioniert soweit auch.
Die Daten kann ich von beiden Anwendungen schreiben und lesen.

Wenn ich erst eine Anwendung mit dem Windows-Explorerer starte und dann die andere im Debugger-Modus von Delphi, dann
kommt eine Fehlermeldung
exception.Create('Mapfile konnte nicht erstellt werden.') Diese Fehlermeldung kommt dann, wenn das Handle nicht fehlerfrei mit
MapHandle:= CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,Sizeof(TDataRec),MapName); geöffnet werden konnte.

Starte ich beide Anwendungen mit dem Windows-Explorer, dann kommt keine Fehlermeldung.
Weshalb kommt die Fehlermeldung im Debugg-Modus ???????
Ich benutze Delphi 2005.


Hier der zugehörige Quelltext, alles in FormCreate geschrieben.
Delphi-Quellcode:
  //MapFile erstellen falls noch nicht vorhanden
  MapHandle:= CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,Sizeof(TDataRec),MapName);
  If MapHandle > 0 then
   Begin
    //Auf den Speicherbereich zugreifen
    PData := MapViewOfFile(MapHandle,FILE_MAP_ALL_ACCESS,0,0,0);
    IF PData <> nil then
     Begin
      //Mutex öffnen und falls noch nicht vorhanden, erzeugen
      MutexHandle := OpenMutex(MUTEX_ALL_ACCESS,false,MutexName);
       If MutexHandle = 0 then
        begin
         //Mutex Neu erzeugen
         MutexHandle := CreateMutex(nil,false,MutexName);
          IF MutexHandle>0 Then
            Timer1.Enabled := True //Kommunikation starten
             else
              Begin
               raise Exception.Create('Konnte Mutex nicht erstellen');
               UnMapViewOfFile(PData);
               CloseHandle(MapHandle);
               halt;
              End;
        end
         else
          Timer1.Enabled := True;
     End
      else
       Begin
        raise exception.create('Mapfile konnte nicht geöffnet werden.');
        CloseHandle(MapHandle);
        halt;
       End;
   End
    else
     begin
      raise exception.Create('Mapfile konnte nicht erstellt werden.');
      halt;
     end;
Ich kann bei Delphi eine Exception ignorieren, aber die Meldung kommt trotzdem und die Datenübergabe läuft nicht.

Es hat wohl irgend etwas damit zu tun, dass das Objekt schon im Speicher vorhanden ist.

Hat jemand von euch das Problem schon mal gehabt und gelöst???

Danke
  Mit Zitat antworten Zitat
Chris.R

Registriert seit: 8. Sep 2009
Ort: Nürnberg
68 Beiträge
 
Delphi 2010 Professional
 
#2

Re: MemoryMappedFile Problem im Debugger-Modus

  Alt 16. Okt 2009, 09:22
Hallo,

funktioniert es wenn du beide Programme über den Windows Explorer startest?

Sorry, hab deinen Beitrag wohl nicht richtig gelesen

Hast du Vista und startest das Delphi als Administrator?


Ciao Chris
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: MemoryMappedFile Problem im Debugger-Modus

  Alt 16. Okt 2009, 10:55
"Mapfile konnte nicht erstellt werden" ist absolut und sowas von einer unaussagekräftigen Fehlermeldung!

Laß dir in diesem Fall noch den "Fehler" via GetLasError (eventuell mit SysErrorMessage in einen String umgewandelt) zurückgeben und häng diesen mit an deine Fehlermaldund dran.
Denn so (wie es jetzt ist) kann man nur raten, was da los ist.


PS: Das HALT würde ich auch nochmal überdenken.
Dieses ist nicht grade eine "nette" Variante um ein Programm zu beenden ("beenden" trifft es nichtmal ... man läßt es so eher radikal "abstürzen")
$2B or not $2B
  Mit Zitat antworten Zitat
edmu

Registriert seit: 27. Jul 2004
41 Beiträge
 
#4

Re: MemoryMappedFile Problem im Debugger-Modus

  Alt 16. Okt 2009, 11:35
Ich habe Delphi 2005 auf XP und starte alles als Admin.


Ich habe den fehlercode mit GetLastError ausgelesen.

Das Ergebnis ist 5.

Laut Unterlagen von "System Error Codes" von Microsoft ist das folgende Meldung:

ERROR_ACCESS_DENIED
5 (0x5)
= Zugriff abgelehnt

Ich habe nach meiner ersten Nachricht auch folgendes probiert.
Erst versuchen mit "CreateFileMapping", wenn das nicht funktioniert
mit "OpenFileMapping". Funktioniert aber auch nicht.

Der Quellcode stammt aus einem Beispiel-Programm und habe diesen so übernommen.

Wie gesagt, wenn ich die Anwendungen mit dem Explorer öffne, funktioniert alles einwandfrei.

mfg
  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 06:33 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