![]() |
EReadError nur auf einem Rechner
Habe auf einem Kundenrechner ein Problem bekomme dort beim Starten einen EReadError mit
Fehler beim Lesen von TextLabel.Lines.Strings: Zugriffsverletzung bei Adresse 038D0000. Schreiben von Adresse 038D0000 das Problem ist, in der Unit, wo er einen Fehler bekommt (ist ein Splash screen) gibt es kein TextLabel. Der Fehler kommt beim
Delphi-Quellcode:
FormCreate wird nicht mehr aufgerufen
constructor TfrSplash.Create(AOwner: TComponent; aIsTerminalServer : Boolean);
begin AddFullDebug('TfrSplash.Create.1'); inherited Create(AOwner); << hier kommt der Fehler AddFullDebug('TfrSplash.Create.2'); end; CreateParams wird noch richtig aufgerufen Das ist der Stack zu dem Zeitpunkt ...
Code:
hat jemand einen hinweis zu dem problem?
<Call="Forms.Forms.TApplication.HandleException" Offset="6" LineNumber="8256"/>
<Call="Controls.Controls.TWinControl.MainWndProc" Offset="9" LineNumber="7079"/> <Call="Forms.Forms.TControlScrollBar.Update" Offset="20" LineNumber="2341"/> <Call="Forms.Forms.TScrollingWinControl.UpdateScrollBars" Offset="16" LineNumber="2480"/> <Call="Forms.Forms.TScrollingWinControl.WMSize" Offset="22" LineNumber="2598"/> <Call="System.System.TObject.Dispatch"/> <Call="Controls.Controls.TControl.WndProc" Offset="83" LineNumber="5146"/> <Call="Controls.Controls.TWinControl.WndProc" Offset="111" LineNumber="7304"/> <Call="Forms.Forms.TCustomForm.WndProc" Offset="136" LineNumber="3512"/> <Call="Classes.Classes.TThreadList.UnlockList"/> <Call="Graphics.Graphics.FreeMemoryContexts" Offset="12" LineNumber="5060"/> <Call="Controls.Controls.TWinControl.MainWndProc" Offset="3" LineNumber="7073"/> <Call="Classes.Classes.StdWndProc"/> <Call="Controls.Controls.TWinControl.DefaultHandler" Offset="23" LineNumber="7334"/> <Call="Forms.Forms.TCustomForm.DefaultHandler" Offset="7" LineNumber="4576"/> <Call="Controls.Controls.TControl.WMWindowPosChanged" Offset="1" LineNumber="5409"/> <Call="Controls.Controls.TWinControl.WMWindowPosChanged" Offset="11" LineNumber="7720"/> <Call="Controls.Controls.TControl.WndProc" Offset="83" LineNumber="5146"/> <Call="SysUtils.SysUtils.FormatBuf"/> <Call="SysUtils.SysUtils.FormatBuf"/> <Call="SysUtils.SysUtils.FormatBuf"/> <Call="SysUtils.SysUtils.FormatBuf"/> <Call="Controls.Controls.TWinControl.WndProc" Offset="111" LineNumber="7304"/> <Call="System.System.@LStrFromPCharLen"/> <Call="SysUtils.SysUtils.FmtStr"/> <Call="Classes.Classes.TList.Delete"/> <Call="Controls.Controls.TWinControl.WndProc" Offset="111" LineNumber="7304"/> <Call="Forms.Forms.TCustomForm.WndProc" Offset="136" LineNumber="3512"/> <Call="Classes.Classes.TThreadList.UnlockList"/> <Call="Graphics.Graphics.FreeMemoryContexts" Offset="12" LineNumber="5060"/> <Call="Forms.Forms.TCustomForm.WndProc" Offset="136" LineNumber="3512"/> <Call="Controls.Controls.TWinControl.MainWndProc" Offset="3" LineNumber="7073"/> <Call="Classes.Classes.StdWndProc"/> <Call="Forms.Forms.TCustomForm.SetMenu" Offset="27" LineNumber="4032"/> <Call="Forms.Forms.TCustomForm.DefaultHandler" Offset="7" LineNumber="4576"/> <Call="Forms.Forms.TCustomForm.WMNCCreate" Offset="2" LineNumber="4941"/> <Call="Controls.Controls.TControl.WndProc" Offset="83" LineNumber="5146"/> <Call="Controls.Controls.TWinControl.WndProc" Offset="111" LineNumber="7304"/> <Call="Forms.Forms.TCustomForm.WndProc" Offset="136" LineNumber="3512"/> <Call="Controls.Controls.TWinControl.MainWndProc" Offset="3" LineNumber="7073"/> <Call="Classes.Classes.StdWndProc"/> <Call="Controls.Controls.InitWndProc" Offset="30" LineNumber="2072"/> <Call="Windows.Windows.CreateWindowEx"/> <Call="Controls.Controls.TWinControl.CreateWindowHandle" Offset="1" LineNumber="6778"/> <Call="Forms.Forms.TCustomForm.CreateWindowHandle" Offset="25" LineNumber="4507"/> <Call="Controls.Controls.TWinControl.CreateWnd" Offset="21" LineNumber="6762"/> <Call="Classes.Classes.TReader.ReadValue"/> <Call="Classes.Classes.TReader.CheckValue"/> <Call="Classes.Classes.TReader.ReadListEnd"/> <Call="Classes.Classes.TReader.ReadDataInner"/> <Call="System.System.SysReallocMem"/> <Call="Forms.Forms.TScrollingWinControl.CreateWnd" Offset="1" LineNumber="2374"/> <Call="Forms.Forms.TCustomForm.CreateWnd" Offset="1" LineNumber="4432"/> <Call="Controls.Controls.TWinControl.CreateHandle" Offset="3" LineNumber="6883"/> <Call="Controls.Controls.TWinControl.HandleNeeded" Offset="4" LineNumber="8894"/> <Call="Controls.Controls.TWinControl.GetHandle" Offset="1" LineNumber="8900"/> <Call="Forms.Forms.TCustomForm.GetClientRect" Offset="1" LineNumber="3216"/> <Call="Controls.Controls.TControl.GetClientHeight" Offset="1" LineNumber="3994"/> <Call="Controls.Controls.TWinControl.ReadState" Offset="3" LineNumber="6096"/> <Call="Controls.Controls.TControl.SetClientWidth" Offset="1" LineNumber="3989"/> <Call="Controls.Controls.TWinControl.ReadState" Offset="9" LineNumber="6102"/> <Call="Forms.Forms.TCustomForm.ReadState" Offset="33" LineNumber="3062"/> <Call="Classes.Classes.TReader.ReadRootComponent"/> <Call="Classes.Classes.TReader.ReadRootComponent"/> <Call="Classes.Classes.TStream.ReadComponent"/> <Call="Classes.Classes.InternalReadComponentRes"/> <Call="Classes.Classes.InitComponent"/> <Call="Controls.Controls.TWinControl.WndProc" Offset="111" LineNumber="7304"/> <Call="System.System.@AfterConstruction"/> <Call="System.System.TObject.Create"/> <Call="Classes.Classes.InitInheritedComponent"/> <Call="Classes.Classes.InitInheritedComponent"/> <Call="Forms.Forms.TCustomForm.Create" Offset="8" LineNumber="2851"/> <Call="Forms.Forms.TCustomForm.Create" Offset="16" LineNumber="2859"/> <Call="System.System.@WStrClr"/> <Call="System.System.UTF8Decode"/> <Call="System.System.SysReallocMem"/> <Call="System.System.TObject.NewInstance"/> <Call="System.System.@ClassCreate"/> <Call="frSplash.frSplash.TfrSplash.Create" Offset="1" LineNumber="246"/> das progamm läuft auf über 100 rechner ohne probleme, und es ist auch nichts auffälliges sonst zu sehen auf dem rechner (XP SP3 alles Standard) |
Re: EReadError nur auf einem Rechner
Hallo,
habt Ihr die Exe auf dem Kundenrechner schonmal ausgetauscht, eventuell ist diese beschädigt. |
Re: EReadError nur auf einem Rechner
Zitat:
|
Re: EReadError nur auf einem Rechner
Hallo,
hast Du mal ein Programm geschrieben, dass nur so ein TextLabel enthält und geschaut, ob das Programm funktioniert? Von welchem Typ ist TextLabel? Ist das irgendeine Windowskomponente..., die in Delphi gekapselt ist und (dummerweise) auf diesem einen Rechner fehlt oder in einer anderen Version vorliegt? Will sagen, das muss nicht zwingend ein Fehler in Deinem Programm sein, es kann auch sein, dass das System auf dem Problemrechner irgendwie ein bisserl anders ist, als alle anderen. Der Fehler läßt vermuten, dass das Programm etwas anderes aus dem Stream lesen will, als dort drin ist. |
Re: EReadError nur auf einem Rechner
Das problem ist aber, das dieses Form, was er da lädt, gar kein TEXTLABEL besitzt.
Keine Ahnung warum er versucht da was zu laden, wo es nix gibt ... |
Re: EReadError nur auf einem Rechner
Hallo,
das ist aber seeeeehr komisch. Was steht den in AOwner drin, was ist das für eine Klasse? Von was ist TfrSplash abgeleitet? Hat garantiert kein Vorfahre von irgendwem ein TextLabel? Kannst Du in das
Delphi-Quellcode:
hineindebuggen?
inherited Create(AOwner);
Durchsuche mal das gesamte Projekt, ob da irgendwo ein Textlabel vorkommt, das in der Vererbungshierarchie bei einem Vorfahren von TfrSplash angesiedelt ist. Funktioniert ein
Delphi-Quellcode:
(unabhängig von eventuell später auftretenden negativen Nebenwirkungen)?
inherited Create(Nil);
Mir ist es mehrmals passiert, dass ich auf Zugriffsverletzungen gestoßen bin, wobei der Fehler nicht an der Stelle aufgetreten ist, die mir Debugger und Fehleradresse meldeten, sondern die Fehler waren "kurz" vorher. |
Re: EReadError nur auf einem Rechner
TfrSplash ist von TForm abgeleitet
Delphi-Quellcode:
also Owner habe ich einmal Application und einmal nil übergeben, beides macht den selben Fehler ...
TfrSplash = class(TForm)
trLogin: TTimer; pmServers: TTBXPopupMenu; trAutoLogin: TTimer; ilFlags: TImageList; procedure FormCreate(Sender: TObject); procedure trLoginTimer(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure pmServersPopup(Sender: TObject); procedure trAutoLoginTimer(Sender: TObject); private Ich verstehe es auch nicht wirklich, habe zwar auch schon öfters komische sachen gesehen, die dann ganz anders waren als vorerst offensichtlich, aber das ist schon sehr sehr komisch ... Problem ist, auf dem Kundenrechner kann ich nicht debugen, sonst wäre es wahrscheinlich ein kinderspiel .... dachte schon es hat was mit der codierung zu tun (hat vorhin mal ein problem, das ein sourcecode nicht ansi codiert war, und deshalb der Commandline compiler abgebrochen hat) aber hier?!?!?!? |
Re: EReadError nur auf einem Rechner
Hallo,
befürchte, Du mußt hier mal auf Deinem Rechner mit dem Debugger da durch und einfach die einzelnen Zeilen beobachten, ob Du da irgendwo an 'nem TextLabel vorbei kommst. Ansonsten: Kannst Du
Delphi-Quellcode:
mal durch
pmServers: TTBXPopupMenu;
Delphi-Quellcode:
ersetzen oder das Menü auch mal ganz rausnehmen? Oder kannst Du feststellen, ob da eventuell intern irgendwo ein TextLabel genutzt wird.
pmServers: TPopupMenu;
Oder kannst Du ein anderes Formular anstelle des Splashformulars einbinden, dass ansonsten die gleiche Funktionalität hat oder zumindest soweit funktioniert, dass Du beim Programmstart über die "fehlerhafte" Stelle hinwegkommst? 'ne Idee zum systematischen Suchen hab' ich momentan zugegebenermaßen nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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