![]() |
MemoryMappedFile Problem im Debugger-Modus
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
Delphi-Quellcode:
Diese Fehlermeldung kommt dann, wenn das Handle nicht fehlerfrei mit
exception.Create('Mapfile konnte nicht erstellt werden.')
Delphi-Quellcode:
geöffnet werden konnte.
MapHandle:= CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,Sizeof(TDataRec),MapName);
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:
Ich kann bei Delphi eine Exception ignorieren, aber die Meldung kommt trotzdem und die Datenübergabe läuft nicht.
//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; 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 |
Re: MemoryMappedFile Problem im Debugger-Modus
Hallo,
funktioniert es wenn du beide Programme über den Windows Explorer startest? Sorry, hab deinen Beitrag wohl nicht richtig gelesen :oops: Hast du Vista und startest das Delphi als Administrator? Ciao Chris |
Re: MemoryMappedFile Problem im Debugger-Modus
"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") |
Re: MemoryMappedFile Problem im Debugger-Modus
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:03 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