AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Supports ohne out Parameter

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

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

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 11:27
Ich verstehe nicht, weshalb Dir alle raten, nicht TInterfacedObject zu verwenden... Ändere einfach
Delphi-Quellcode:
var
  a: TFirstSecond;
in
Delphi-Quellcode:
var
  a: IInterface;
und alles funktioniert.
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (10. Okt 2012 um 11:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 11:40
Ich verstehe nicht, weshalb Dir alle raten, nicht TInterfacedObject zu verwenden... Ändere einfach
Delphi-Quellcode:
var
  a: TFirstSecond;
in
Delphi-Quellcode:
var
  a: IInterface;
und alles funktioniert.
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 11:51
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
pflaume

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

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 12: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

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

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 13: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
 
#6

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 18: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

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

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 18: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
Thom

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

AW: Supports ohne out Parameter

  Alt 10. Okt 2012, 12: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
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:01 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