![]() |
Interface in eine TObjectList einerben
Hallo,
ich hab das Problem das ich ein Interface habe das bei TObjectList Objeten mit rein soll. Ergo sieht das so aus:
Delphi-Quellcode:
TAListEx = class(TAList, IFormularTypList)
So nun hat man das Problem man kann nur Interfaces mit reinholen wenn man als Basis InterfacedObject hat. TObjectList hat als BasisKlasse jedoch TObject. Jetzt hab ich mir meine eigene TInterfacedObjectList geschrieben damit das klappt. Problem hierbei ist nun nur das das Freigeben einer Instanz zum fehler führt. Das sieht so aus
Delphi-Quellcode:
so nun ist die Frage woran liegt jetzt der Fehler an meiner InterfacedObjList?
var
AList : IFormularTypList; begin AList := TAListEx.Create; AList.Free; //CRASH end; Kennt jemand eine ObjectList die von hauseaus schon Interfaces unterstützt? Gruß |
Re: Interface in eine TObjectList einerben
Zitat:
|
Re: Interface in eine TObjectList einerben
hm das heißt also,
es muß an meiner implementierung der InterfacedObjList liegen, sprich an einer der routinen die IInterface mitbringt. function QueryInterface(const IID: TGUID; out Obj) : HResult; stdcall; function _AddRef : Integer; stdcall; function _Release : Integer; stdcall; procedure AfterConstruction; override; procedure BeforeDestruction; override; class function NewInstance : TObject; override; hab diese bisher nur von TInterfacedObj kopiert. nochmal rüberschaun. müßte ja bestimmt bei Destruction oder Release der Fehler sein. hm hat jemand mal ein beispiel für eine ObjectList wo ein Interface mit eingeerbt ist? |
Re: Interface in eine TObjectList einerben
Zitat:
Delphi automatisch wenn der Gültigkeitsbereich verlassen wird und gibt AList dann frei Im Zweifelsfall kannst Su den Nachfahren auch von TInterfaceList ableiten. |
Re: Interface in eine TObjectList einerben
Die Unit Classes enthält eine Klasse TInterfaceList, mit der sich Listen von Interfaces verwalten lassen. Wenn deine Objekte alle ein Interface implementieren, sollte diese alles haben was Du brauchst.
Delphi-Quellcode:
Man sollte aber immer darauf achten Interfaces und Objekte nicht zu mischen, (meistens)früher oder später kracht´s. Dem Referzzähler geht dann die Puste aus. Ich habe mir angewöhnt, Bei Objekten mit Interfaces diese nur über entsprechende Interface-Variablen zu verwenden.
var
IList: TInterfaceList; begin IList := TInterfaceList.Create; try IList.Add(<InterfaceRef>:IInterface) ... finally IList.Free; end; Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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-2025 by Thomas Breitkreuz