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.