AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Interface in eine TObjectList einerben

Ein Thema von Master_BB · begonnen am 24. Nov 2006 · letzter Beitrag vom 24. Nov 2006
Antwort Antwort
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#1

Interface in eine TObjectList einerben

  Alt 24. Nov 2006, 12:53
Hallo,
ich hab das Problem das ich ein Interface habe das bei TObjectList Objeten
mit rein soll. Ergo sieht das so aus:
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:
var
  AList : IFormularTypList;
begin
  AList := TAListEx.Create;
  AList.Free; //CRASH
end;
so nun ist die Frage woran liegt jetzt der Fehler an meiner InterfacedObjList?

Kennt jemand eine ObjectList die von hauseaus schon Interfaces unterstützt?

Gruß
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Interface in eine TObjectList einerben

  Alt 24. Nov 2006, 13:11
Zitat von Master_BB:
So nun hat man das Problem man kann nur Interfaces mit reinholen
wenn man als Basis InterfacedObject hat.
Nö. TInterfacedObject ist nur eine Standardimplementierung von IInterface.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#3

Re: Interface in eine TObjectList einerben

  Alt 24. Nov 2006, 13:14
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?
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Interface in eine TObjectList einerben

  Alt 24. Nov 2006, 13:19
Zitat von Master_BB:
Delphi-Quellcode:
var
  AList : IFormularTypList;
begin
  AList := TAListEx.Create;
  AList.Free; //CRASH <- Free ist hier nicht nötig
end;
Da Du AList als Interface deklariert hast brauchst Du AList nicht freizugeben. Bei einem Interface erkennt
Delphi automatisch wenn der Gültigkeitsbereich verlassen wird und gibt AList dann frei


Im Zweifelsfall kannst Su den Nachfahren auch von TInterfaceList ableiten.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
bhenker

Registriert seit: 10. Dez 2005
Ort: Plauen
8 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Interface in eine TObjectList einerben

  Alt 24. Nov 2006, 13:58
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:
var
  IList: TInterfaceList;
begin
  IList := TInterfaceList.Create;
  try
   IList.Add(<InterfaceRef>:IInterface)
   ...
  finally
    IList.Free;
end;
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.

Gruß
  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 19:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz