Servus!
Vor einigen Jahren erstellte ich für eine Kollegen ein Programm, das via MMF Daten von einem zweiten Programm empfing. Das wurde dann von ihm, wie geplant, weitergegeben und von mehreren Leuten in einem Hobbyprojekt nahezu weltweit erfolgreich eingesetzt.
Nun mehren sich die Meldungen, daß es unter Win7 und Win8 zu Problemen kommt. In den Abständen, in denen eigentlich die Daten abgefragt werden sollten, werden Zugriffsverletzungen angezeigt. Das Problem besteht jedoch nicht allgemein, ich kann den Fehler beispielsweise nicht nachvollziehen. Unter WinXP gab es anscheinend keine Schwierigkeiten.
Vielleicht könnte jemand der sich gut in der Materie auskennt, den nachfolgenden Programmausschnitt ansehen und auf mögliche Fehlerquellen hin abklopfen. Ich bin nämlich ratlos.
Danke!
Gruß,
Oiner
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59:
| unit DemoUnit;
type PSharedHypeData = ^TSharedHypeData; TSharedHypeData = record SlotStarted: Array [0..39] of Integer; RemoteShutdown: Array [0..39] of Integer; SlotData: Array [0..39] of Integer; axis : Array [0..5] of Integer ; PositionX : Integer; PositionY : Integer; SavePosition : Array [0..39] of Integer; MoveAll : Integer; Sync : Array [0..39] of Integer; end;
var g_SharedHypeData: TSharedHypeData; aFileHandle: THandle; pViewData: PSharedHypeData;
implementation
procedure TForm1.MMF_Vorbereitung; begin aFileHandle:= OpenFileMapping( FILE_MAP_READ, False, 'Global\xsimgaugeslot'); if aFileHandle= INVALID_HANDLE_VALUE then raise Exception.Create('Handle-Fehler'); try GetMem(pViewData, SizeOf(LongInt)); pViewData:= MapViewOfFile( aFileHandle, FILE_MAP_READ, 0, 0, 0); if pViewData= nil then begin Timer1.Enabled:= False; with TrackBarPanel do begin Visible:= True; Top:= 0; Left:= 0; end; raise Exception.Create('MapViewOfFile-Fehler'+#13+#10+ 'manuelle Steuerung aktiviert'); end; finally end; end;
procedure TForm1.MMF_Lesen; begin EAC1TrackBar.Position:=pViewData^.axis[0]; EAC2TrackBar.Position:=pViewData^.axis[1]; Application.ProcessMessages; end; |
Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 22.05.2013 um 11:13