Announcement

Collapse
No announcement yet.

Gültige Pointer erkennen ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Gültige Pointer erkennen ?

    Hallo zusammen,

    kennt jemand eine Möglichkeit einen ungültigen Pointer zu erkennen ohne die Anwendung von Try... Except ?

    Hintergrund ist der, dass ich beim Beenden meiner Anwendung sporadisch Zugriffsverletzungen ohne Angabe eines Moduls etc. bekomme.
    Inzwischen habe ich rausgefunden dass diese in einem Datenmodul ausgelöst werden wenn eine TADOConnection geschlossen werden soll und dann die aktuellen Indizes der verwendeten Datasets speichern soll.

    Ich frage auf "Assigned(<Dataset>)" ab, das ergibt TRUE, aber der Zugriff auf ein Property erzeugt dann eine Schutzverletzung...

    Die Hilfe zu D7 verweist zwar auch auf diesen Umstand, bietet aber keine Lösung an.

    Bedanke mich für jeden Tip !

    mfg Holger Rogge

  • #2
    Hallo Holger,
    eine Andere Möglichkeit gibt es nicht. Die Behandlung wäre für jeden Typ unterschiedlich. Ich denke, dass dein Datenmodul bereits beim Zerstören (Destroy) ist.
    Meiner Ansicht nach hast du erst mal eine Möglichkeit:
    Prüfe den ComponentState vom DataModul auf csDestroying...
    <CODE>
    if (csDestroying in DeinDataModule.ComponentState) then Exit;
    </CODE>
    Sauber ist die Lösung allerdings nicht. Vor Allem nicht, wenn es eine Methode aus dem DataModule selbst ist.
    Das Schliessen von Datenmodulen musst du in deiner Anwendung sauber kontrollieren.
    Also z.B. - alle Forms, welche Daten liefern, behandeln die Methode OnCloseQuery des Formulares.
    Darin kannst du im DatenModul checken, ob noch Änderungen zu speichern sind, entsprechende Fragen stellen und evtll. das Schliessen des Formulares verhindern.
    Ab dem Moment, wo das Form geschlossen wird, erfolgen keine Aktionen mehr im DatenModul.
    Damit sollte alles sauber ablaufen.
    Sollte meine Vermutung, dass das Ganze beim Freigenen des DataModules passiert, nicht zutreffen, dann sollte der Zugriff auf ein Property des DataSets keine AV auslösen.
    <BR>Gruß, Fran

    Comment


    • #3
      Hallo Frank,

      Danke erst mal für Deine Antwort !

      Eigentlich bin ich mir aber bezüglich des Freigebens keiner Schuld bewusst;
      über das Event "ADOConnection.OnBeforeDisConnect" schliesse ich alle geöffneten Tabellen und speicher vorher noch die aktuell eingestellten Indizes weg. Dabei "passiert" es dann...

      Aber wie gesagt, Vielen Dank noch mal, sobald ich mehr Zeit habe klinke ich mich da noch einmal ein.

      mfg Holger Rogg

      Comment

      Working...
      X