Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dr. Watson (Runtime) bzw. Access Violation (IDE) (https://www.delphipraxis.net/6771-dr-watson-runtime-bzw-access-violation-ide.html)

jmk 22. Jul 2003 08:16


Dr. Watson (Runtime) bzw. Access Violation (IDE)
 
Hallo zusammen,

ich bin frustriert und hoffe auf Hilfe von der Community. :firejump:

Vom VirtualTreeView aka VT (von Dipl.-Ing. Mike Lischke) habe ich eine eigene Komponente abgeleitet. Hierbei verwalte ich meine Objekte in einer Baumstruktur ausserhalb von VT und weise diesem nach Erzeugung zu.
Wenn es bei dem einem Mal bleibt ist alles OK. Sobald ich meinen Objekt-Baum leere (z.B. N.DeleteChildren) und erneut zuweise, gibt es manchmal in der IDE eine 'Access Violation'-Fehlermeldung und 'Dr. Watson' zur Laufzeit.

== System und Software ==
Delphi 5.0 + Update Pack 1
Windows NT 4.000.1381 + SP 6

== Code-Auszug ==
Delphi-Quellcode:
TMyNode = (TPersistent)
private
  FChildren: TList
  FParent: TMyNode;
  ..
  procedure SetParent(Value: TMyNode);
protected
  function GetChild(i: Integer): TMyNode;
public
  ...
  property Parent: TMyNode read FParent write SetParent;
  property Children[i: Integer]: TMyNode read GetChild;
  ...
end;


TMyVT = class(TVirtualStringTree)
private
  FRoot: TMyNode;
  procedure SetRoot(Value: TMyNode);
  ...
public
  ...
  property Root: TMyNode read FRoot write SetRoot;
  ...
end;

//==
procedure TMyVT.SetRoot(const Value: TMyNode);
begin
  FRoot := Value;
  if Assigned(FRoot) then
  begin
    Clear; // -> bzw. RootNodeCount = 0;
    RootNodeCount := FRoot.ChildCount;
    if RootNodeCount > 0 then
    begin
      ValidateNode(GetFirst, False);
    end;
  end else
    RootNodeCount := 0;
end;
//==

//== (siehe MVCDemo aus dem Paket 'VirtualTrees')
procedure TBizObjViewerAbs.SetFactory(Value: TBizObjFactory);
begin
  if FFactory = Value then
    Exit;
  { If we already have a list, break the link to it. }
  if Assigned(FFactory) then
    FFactory.Viewer := nil;
  { Now make a link to the new structure: }
  FFactory := Value;
  if Assigned(FFactory) then
  begin
    FFactory.Viewer := Self;
    RootNodeCount := FFactory.Root.ChildCount;
    if FFactory.Root.ChildCount > 0 then
      ValidateNode(GetFirst, False);
    //--
    if FAutoSelectFirstVisible then
      SelectFirstVisible;
    end else
      RootNodeCount:=0;
  end;
end;
//--
== Methoden-Aufrufe ==
1: die Children von 'Root' bzw. 'Tree.Root' löschen, neu füllen und zuweisen
2: erneute Erzeugung eines neuen Objekt-Baum und die Zuweisung

[1]
Beispiel:
Delphi-Quellcode:
   FPropertyRoot.DeleteChildren;
   GenPropertyTree(FPropertRoot, Instance)
   MyVT.Root = FPropertyRoot;
bzw.
Delphi-Quellcode:
   FPropertyTree.Viewer := nil;
   FPropertyTree.Root.DeleteChildren;
   GenPropertyTree(FPropertyTree.Root, Instance)
   MyVT.Tree = FPropertyTree;
[2]
Z.B.
Delphi-Quellcode:
   FPropertyRoot := TPropertyFilter.Create;
   FPropertyTree := TPropertyTree.Create;
   + die Zuweisung
Vermutung:
Irgendwie versucht das Programm auf 'tote' Objekt-Referenzen zuzugreifen, Obwohl die Objekte ordentlich freigegeben werden (MyNode.DeleteChildren).

Ich bekomme bzw. provoziere folgende Fehlermeldung, wenn ich das Programm-Fenster minimiere, wieder herstelle und anschließend ein paar Klicks betätige. Es passiert auch manchmal, wenn zwischen den laufenden Programmen bzw. neu gestartete gewechselt wird.

=== Debug-Dialog -> 'Dr. Watson' zur Laufzeit auf anderen Maschinen

Die Anweisung "0x004ea7b1" verweist auf Speicher in "0x0000021f".
Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.

Klicken Sie auf "OK", um die Anwendung zu beenden.
Klicken Sie auf "Abbrechen", um die Anwendung zu debuggen.

=== Event-Monitor

Die Open-Prozedur für den Dienst "Appn" in der DLL "pcs_perf.dll" ist
fehlgeschlagen. Die Systemleistungsdaten für diesen Dienst werden nicht
verfügbar sein. Der zurückgegebene Status-Code ist DWORD 0.

------------------------------------------------------------------------
Ich kann mit diesen Fehlermeldungen nur sehr wenig anfangen

Hat jemand eine Idee, um was für einen fatalen Fehler es sich hier handelt ?

Ich bin verzweifelt und würde mich auf jeden Hinweis zur Lösung des Problems

Danke im Voraus,
Jean-Marie

[edit=Luckie]Delphi-Tags eingefügt. beim nächsten mal bitte selber machen. Danke. Mfg, Luckie[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 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