AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dr. Watson (Runtime) bzw. Access Violation (IDE)
Thema durchsuchen
Ansicht
Themen-Optionen

Dr. Watson (Runtime) bzw. Access Violation (IDE)

Ein Thema von jmk · begonnen am 22. Jul 2003
Antwort Antwort
jmk

Registriert seit: 22. Jul 2003
2 Beiträge
 
#1

Dr. Watson (Runtime) bzw. Access Violation (IDE)

  Alt 22. Jul 2003, 09:16
Hallo zusammen,

ich bin frustriert und hoffe auf Hilfe von der Community.

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]
  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 22:14 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