AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE DllExpert unit wird finalisiert bevor richtig unregistriert
Thema durchsuchen
Ansicht
Themen-Optionen

DllExpert unit wird finalisiert bevor richtig unregistriert

Ein Thema von mattia72 · begonnen am 4. Jan 2025 · letzter Beitrag vom 4. Jan 2025
Antwort Antwort
mattia72

Registriert seit: 18. Aug 2023
Ort: Ungarn, Pest
14 Beiträge
 
#1

DllExpert unit wird finalisiert bevor richtig unregistriert

  Alt 4. Jan 2025, 13:20
Hallo,

ich habe ein DLL Expert, der gut funktioniert bis ich die IDE schließe.
Dann tritt nämlich eine EAccessViolation Exception auf.

Ich habe herausgefunden, dass die Unit wo ich die IOTAWizard Interface implementiert habe, wird finalisiert before der Destructor aufgerufen wird.

Soviel ich weiß es reicht, wenn man die Extension so registriert:

Delphi-Quellcode:
var
   GDRipExtension : IOTAWizard;

procedure Register;
begin
   GDRipExtension := TDRipExtension.Create;
   RegisterPackageWizard(GDRipExtension);
end;
Hat jemand eine Idee, wie das frühzeitige Entladen vermieden werden kann?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.484 Beiträge
 
Delphi 12 Athens
 
#2

AW: DllExpert unit wird finalisiert bevor richtig unregistriert

  Alt 4. Jan 2025, 13:30
Ich vermute, die globale Variable hält das Interface zu lange. Solange du die nicht noch woanders nutzt, solltest du daraus eine lokale Variable in der Register procedure machen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
mattia72

Registriert seit: 18. Aug 2023
Ort: Ungarn, Pest
14 Beiträge
 
#3

AW: DllExpert unit wird finalisiert bevor richtig unregistriert

  Alt 4. Jan 2025, 16:15
Das hat leider nicht geholfen. Ursprünglich gab es überhaupt keine Variable und so ging es auch nicht.

Delphi-Quellcode:
procedure Register;
var
   dripExtension : IOTAWizard;
begin
   dripExtension := TDRipExtension.Create;
   RegisterPackageWizard(GDRipExtension);
end;
Der Konstruktor wird an keiner anderen Stelle verwendet, also es wird keine Referenz gehalten.
Egal was ich mache, in welche Reihenfolge die Units in der DPR Datei aufgelistet sind, Finalization wird zu früh aufgerufen, obwohl diese Unit sollte eigentlich zuletzt entladen werden.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.484 Beiträge
 
Delphi 12 Athens
 
#4

AW: DllExpert unit wird finalisiert bevor richtig unregistriert

  Alt 4. Jan 2025, 16:41
Die Methode RegisterPackageWizard habe ich selbst noch nicht benutzt. Der MMX Code Explorer registriert sich über eine exportierte function InitExpert :
Delphi-Quellcode:
procedure FinalizeWizard;
begin
  if MMOTAExpertIndex <> -1 then (BorlandIDEServices as IOTAWizardServices).RemoveWizard(MMOTAExpertIndex);
  MMOTAExpertIndex := -1;
end;

function InitExpert(const BorlandIDEServices: IBorlandIDEServices;
    RegisterProc: TWizardRegisterProc;
    var Terminate: TWizardTerminateProc): Boolean stdcall;
begin
  Result := True;
  Terminate := FinalizeWizard;
  MMOTAExpertIndex := (BorlandIDEServices as IOTAWizardServices).AddWizard(TMMXBDSExpert.Create);
end;

exports InitExpert name WizardEntryPoint;
Vielleicht hilft dir das ja weiter.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.484 Beiträge
 
Delphi 12 Athens
 
#5

AW: DllExpert unit wird finalisiert bevor richtig unregistriert

  Alt 4. Jan 2025, 16:46
Womöglich relevant: In der Doku wird bei RegisterPackageWizard immer von design-time packages gesprochen. Der MMX Code Explorer ist aber eine DLL, die im Experts Registry-Key eingetragen ist - also kein Design-BPL.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
mattia72

Registriert seit: 18. Aug 2023
Ort: Ungarn, Pest
14 Beiträge
 
#6

AW: DllExpert unit wird finalisiert bevor richtig unregistriert

  Alt 4. Jan 2025, 19:45
Danke.
Mit IOTAWizardServices.AddWizard und IOTAWizardServices.RemoveWizard funktioniert es ohne Exception
  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 08:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz