![]() |
To many consecutive execptions
Hallo Wissende,
irgendwie, scheine ich heute Pech zu haben, Delphi hat was gegen mich. Ich habe ein kleines Testprojekt:
Delphi-Quellcode:
wenn dann der executor ausgeführt wird, bringt er mir an der Stelle:
{$APPTYPE CONSOLE}
... var exec: TWUSExecutor; logg: TWUSNoLog; begin try exec := TWUSExecutor.Create; try Logg := TWUSNoLog.Create; try exec.TempPath := ExtractFilePath(paramstr(0)); // logg.CreateLog(exec.TempPath, ''); exec.Logger := logg as TWUSNoLog; exec.RunApplicationName := IncludeTrailingPathDelimiter(ExtractFilePath(paramstr(0))) + 'ExecTest.exe'; exec.Parameters('p1@p2@p3@http://nixda'); exec.Run; finally logg.Free; end; finally exec.Free; end; except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end.
Delphi-Quellcode:
procedure WinRun;
begin fState := wusUSDoExecute; fWUSLogger.LogWrite(fState, fRunApplicationName); //<<< hier die Meldung: .. to many ... if WUSWindows.Execute(fRunApplicationName, fParameters) then "... to many consecutive exceptions: 'access violation at 0x00000000: read of address 0x00000000'" dabei ist fWUSLogger im Executor folgendermassen definiert:
Delphi-Quellcode:
und die Logger:
TWUSExecutor = class
strict private ... fWUSLogger: TWUSBaseLogger; //Logger ... public ... property Logger: TWUSBaseLogger read fWUSLogger write fWUSLogger; ... end;
Delphi-Quellcode:
Wenn ich an der Fehlerstelle nachsehe, welchen Wert Logger.LogWrite hat, so verweisst sie auf die Addresse $0, sie sollte aber doch bei der Zuweisung auf die Addresse der Instanz zeigen, welche ich im Testprogramm dem Executor übergeben habe. Weshalb, wird die Addresse unterschlagen?
TWUSBaseLogger = class
private fLogging: boolean; //Logging On or Off public constructor Create; destructor Destroy; override; procedure Clear; procedure LogWrite(const aState: TWUSUpdateState; const aMessage: String); virtual; abstract; property Logging: boolean read fLogging; end; TWUSNoLog = Class(TWUSBaseLogger) public procedure LogWrite(const aState: TWUSUpdateState; const aMessage: String); Override; End; Wenn ich über den selben Mechanismus, in einer Klasse den Logger weiterreiche, geht das einwandfei. Weiss jemand Rat? Danke schon mal, Greeny |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 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 by Thomas Breitkreuz