AGB  ·  Datenschutz  ·  Impressum  







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

Supports ohne out Parameter

Ein Thema von pflaume · begonnen am 10. Okt 2012 · letzter Beitrag vom 10. Okt 2012
Antwort Antwort
Seite 2 von 2     12   
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#11

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 13:10
Dieses Vorgehen ist aber nicht in jedem Fall anwendbar. Man muss sich schon entscheiden, ob man nur mit Interface-Referenzen und Referenzzählung arbeiten will, oder ob man ohne Referenzzählung selber die Objekt-Instanzen verwalten will. Für beide Vorgehen gibt es je nach Anwendungsfall gute Gründe. Man muss dann nur die passende Elternklasse verwenden.
Selbstverständlich. Aber was hat das mit der Ausgangsfrage zu tun? Es ging darin nicht um "in jedem Fall", sondern das ganz konkrete Beispiel. Und da ist nun mal die Verwendung des Variablentyps IInterface, das vom Objekt TInterfacedObject eingeführt wird, die korrekte Lösung.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#12

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 13:12
Zur Verdeutlichung des Ablaufs:
Delphi-Quellcode:
var
  a: TFirstSecond;
  i: IInterface;
  f: IFirst;
  s: ISecond;

begin
  a := TFirstSecond.Create;
  i := a; // a.RefCount wird 1

  if Supports(a, IFirst) then // a.RefCount wird 2 und wieder 1
    Writeln('a supports IFirst');

  if Supports(a, ISecond) then // a.RefCount wird 2 und wieder 1
    Writeln('a supports ISecond');

  if Supports(a, IFirst, f) then // a.RefCount wird 2
    Writeln('[out] a supports IFirst');

  if Supports(a, ISecond, s) then // a.RefCount wird 3
    Writeln('[out] a supports ISecond');
  
  i := nil; // a.RefCount wird 2
  f := nil; // a.RefCount wird 1
  s := nil; // a.RefCount wird 0 und a wird freigegeben

  Readln;
end.
  Mit Zitat antworten Zitat
pflaume

Registriert seit: 3. Nov 2007
3 Beiträge
 
#13

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 13:16
War im Beispiel der falsche Overload der Funktion - der richtige enthält übrigens eine entsprechende Warnung:

Delphi-Quellcode:
function Supports(const Instance: TObject; const IID: TGUID): Boolean;
var
  Temp: IInterface;
begin
  // NOTE: Calling this overload on a ref-counted object that has REFCOUNT=0
  // will result in it being freed upon exit from this routine.
  Result := Supports(Instance, IID, Temp);
end;
Dieser Kommentar fehlt bei mir. Ich habe im Moment auch keine Version außer 2009 zur Hand.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 14:38
Dieser Kommentar fehlt bei mir. Ich habe im Moment auch keine Version außer 2009 zur Hand.
Der Kommentar ist offenbar erst seit XE enthalten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#15

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 19:01
Teste mal das (Jugend forscht ):
Delphi-Quellcode:
if Assigned(TFirstSecond.GetInterfaceEntry(IFirst)) then
    Writeln('TFirstSecond supports Interface IFirst');

if Assigned(TFirstSecond.GetInterfaceEntry(ISecond)) then
    Writeln('TFirstSecond supports Interface ISecond');
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 19:51
Teste mal das (Jugend forscht ):
Delphi-Quellcode:
if Assigned(TFirstSecond.GetInterfaceEntry(IFirst)) then
    Writeln('TFirstSecond supports Interface IFirst');

if Assigned(TFirstSecond.GetInterfaceEntry(ISecond)) then
    Writeln('TFirstSecond supports Interface ISecond');
Ja, und?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#17

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 20:08
ist
  if Supports(TFirstSecond, ISecond) then nicht intuitiver?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 09:39 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