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