AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

To many consecutive execptions

Ein Thema von GreenHorn3600 · begonnen am 29. Aug 2009
Antwort Antwort
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#1

To many consecutive execptions

  Alt 29. Aug 2009, 20:22
Hallo Wissende,

irgendwie, scheine ich heute Pech zu haben, Delphi hat was gegen mich. Ich habe ein kleines Testprojekt:

Delphi-Quellcode:
{$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.
wenn dann der executor ausgeführt wird, bringt er mir an der Stelle:
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:
TWUSExecutor = class
  strict private
   ...
   fWUSLogger: TWUSBaseLogger; //Logger
   ...

  public
   ...
   property Logger: TWUSBaseLogger read fWUSLogger write fWUSLogger;
   ...
 end;
und die Logger:

Delphi-Quellcode:
 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 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?

Wenn ich über den selben Mechanismus, in einer Klasse den Logger weiterreiche, geht das einwandfei.

Weiss jemand Rat?

Danke schon mal,
Greeny
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz