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
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 22.05.2013 um 11:13