Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Word-AddIn - Absturz bei OnBeginShutdown

  Alt 19. Jan 2007, 17:27
Du zerstörst deine ganzen Unterobjekte in OnBeginShutdown. Zu früh!!!
Ich würde das erst im Destruktor Destroy machen, der dann aufgerufen wird, wenn dein Plugin-Objekt wirklich entfernt wird.
Das Event gibt dir Gelegenheit um irgendwelche Daten zu speichern oder für eine Rückfrage beim Benutzer.
Das Objekt XConLog sollte definitiv erst im Destruktor ge"free"t werden.

Ausserdem darf man Destroy nie selbst direkt aufrufen:
Delphi-Quellcode:
XConLog.Destroy; // Falsch
XConLog.Free; // Richtig! die Methode Free ruft intern Destroy auf
Also Suche nach ".Destroy;" -> ersetzen durch ".Free;"

Und noch was:
Jedes (Unter-)Objekt, dass du mit Free freigibst lässt eine Spur zurück, nämlich die Object-Variable
die nun auf einen ungültigen Speicherbereich zeigt:
Delphi-Quellcode:
procedure TXConMag.OnBeginShutdown(var custom: PSafeArray);
begin
  FGlobalConf.Free; // Unterobjekt freigeben
  // aber FGlobalConf zeigt jetzt immer noch auf das alte ungültige Objekt
  // deshalb:
  FGlobalConf := nil;
  // jetzt zeigt das Objekt auf nil und kann mit Assigned(FGlobalConf) zumindest geprüft werden

  // freigeben und auf nil setzen kann man auch in einem Rutsch haben
  FreeAndNil(FGlobalConf);
Würden diese Freigaben der Unterobjekt im Destruktor stattfinden, dann würde FGlobalConf.Free ausreichen,
da keine Gefahr mehr besteht, dass mit FGlobalConf noch irgenetwas passiert.
Andreas
  Mit Zitat antworten Zitat