Thema: Delphi BPL Zugriffsverletzung

Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.359 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: BPL Zugriffsverletzung

  Alt 20. Jul 2014, 19:42
Delphi-Quellcode:
IDVAParser = interface(IInterface)
    ['{7082CCBB-2680-4BC4-8B17-7FFE1D602A0A}']

    procedure ParseDevice(const aText: PChar; DeviceList: TDeviceList);
...
  end;
So ähnlich sieht das bei uns auch aus, allerdings sind das dann nicht Parameter vom Typ TDeviceParameterList sondern vom Typ IInterfacedList<IDeviceParameter>...

Deine Funktionen sehen ja so aus als ob die Objekte nur übergeben und innerhalb der Funktion verwendet werden. Insofern hast du mit dem Lebenszyklus auch keine Probleme (da du Interfaces und Objekte mischst). Allerdings heißt die BPL-Hölle nicht umsonst so. Ganz sorglos mit Objekten werfen kann man da auch nicht.
Allerdings weiß ich das nicht genauer, da ich immer sauber komplett mit Interfaces gearbeitet habe und das Problem daher nie hatte.

Hast du vielleicht einmal einen Stacktrace von einem solchen Fehler und den Quelltext an der Stelle und kannst das zeigen?
Generell:
Wenn irgendwo nil drin steht, wo es nicht drin stehen sollte, würde ich das ganze in Getter und Setter auftrennen und einen Haltepunkt auf den Setter setzen mit "wenn nil übergeben wird" als Bedingung. Alternativ könntest du auch einen Datenhaltepunkt nutzen.

Zitat:
Erstens dürfen in dem Interface selbst keinerlei Objektreferenzen vorkommen.
Wo steht das? Bei DLL kann ich das nachvollziehen. Bei BPL nicht.
Das habe ich ja auch geschrieben, bei BPL geht es. Allerdings macht dann das Interface wenig Sinn, dann kannst du auch gleich konsistent bleiben und ein Objekt zurückgeben. Mischen von Objektreferenzen und Interfaces ist immer schlecht.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat