AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Interface - Supports

Ein Thema von stahli · begonnen am 26. Jul 2016 · letzter Beitrag vom 26. Jul 2016
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#1

Interface - Supports

  Alt 26. Jul 2016, 11:48
Delphi-Version: XE3
Gestern bin ich fast verzweifelt, bis ich meinen Schreibfehler entdeckt habe...

Delphi-Quellcode:
procedure MyProc(aParam: IInterface);
var lMyThing: TMyThing; // richtig wäre natürlich IMyThing
begin
  if Supports(aParam, IMyThing, lMyThing) then
    lMyThing.DoIt;
end;

In DoIt wurde eingesprungen, aber sofort danach gab es einen Zugriffsfehler.

Wäre sicher nicht verkehrt, wenn der Compiler hier abbrechen oder wenigstens warnen würde.

Vielleicht will ja mal jemand einen QC-Eintrag machen (ich bin da nicht mehr UpToDate).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Interface - Supports

  Alt 26. Jul 2016, 11:53

Vielleicht will ja mal jemand einen QC-Eintrag machen (ich bin da nicht mehr UpToDate).
Und wie soll der lauten?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Interface - Supports

  Alt 26. Jul 2016, 11:55
Der dritter Parameter ist völlig typenlos. Manche Dinge wie Supports(..) oder FreeAndNil(..) sind einfach so. Wahrscheinlich irgendwelche Altlasten von vor 25 Jahren. Ich glaube nicht dass sich daran noch etwas ändern wird.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Interface - Supports

  Alt 26. Jul 2016, 12:04
Der dritter Parameter ist völlig typenlos. Manche Dinge wie Supports(..) oder FreeAndNil(..) sind einfach so. Wahrscheinlich irgendwelche Altlasten von vor 25 Jahren. Ich glaube nicht dass sich daran noch etwas ändern wird.
Das ist keine Altlast, sondern liegt daran, daß out- wie var-Parameter der exakt selbe Typ übergeben werden muss. Der tatsächliche Typ ist aber eben nicht bekannt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Interface - Supports

  Alt 26. Jul 2016, 12:07

Vielleicht will ja mal jemand einen QC-Eintrag machen (ich bin da nicht mehr UpToDate).
Und wie soll der lauten?
Nehmen wir mal diesen Eintrag und kombinieren ihn mit einer Verbesserung der constraints für Generics und voila, wir können folgende Funktion schreiben:

function Supports<T: IInterface, guid>(const Instance: IInterface; out Intf: T): Boolean;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (26. Jul 2016 um 12:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Interface - Supports

  Alt 26. Jul 2016, 12:25
Ich vermute da schlagt die automtatische Referenzzählung zu.

Du darfst hier wirklich nicht

var lMyThing: TMyThing; // richtig wäre natürlich IMyThing sondern mussst (!)
var lMyThing: IMyThing; um mit dem Interface arbeiten zu können

Du bekommst kein TMyThing geliefert sondern nur das Interface. Deshalb ist es vollkommen OK das es danach kracht.
Der Compiler kann hier nicht so richtig warnen da er ja nur das Interface zu sehen bekommt.
Evtl. hat ja dieses einen (Kauf-)Hilfstools das weiter Compilerwarnungen/Fehler ergänzt
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Interface - Supports

  Alt 26. Jul 2016, 12:31
Evtl. hat ja dieses einen (Kauf-)Hilfstools das weiter Compilerwarnungen/Fehler ergänzt
Ich hab es Roman Yankovsky mal vorgeschlagen (FixInsight)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
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 13:15 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