AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi typisierte Konstante definieren: const C: array [...] of TGUID = (...);
Thema durchsuchen
Ansicht
Themen-Optionen

typisierte Konstante definieren: const C: array [...] of TGUID = (...);

Ein Thema von Panthrax · begonnen am 16. Aug 2012 · letzter Beitrag vom 17. Aug 2012
Antwort Antwort
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

typisierte Konstante definieren: const C: array [...] of TGUID = (...);

  Alt 16. Aug 2012, 08:10
Delphi-Version: 2010
Delphi-Quellcode:
type
  ISchnittstelle = interface
  end;

// TSchnittstelleClass = class of ISchnittstelle; {1}
// TSchnittstelleClass = interface of ISchnittstelle; {2}

  IEins = interface(ISchnittstelle)
    ['{3E88C3A1-8791-45C2-961D-41423855E863}']
  end;

  IZwei = interface(ISchnittstelle)
    ['{ED86F176-8E55-43BC-8BB2-8FAEB9E52D29}']
  end;

  TFormat = (ftEins, ftZwei);
{1} [DCC Fehler]: E2021 Klassentyp erwartet
{2} Gibt es nicht.


Ich möchte nun eine Konstante dieser Art definieren:

Versuch 1:
Delphi-Quellcode:
const
  Schnittstellen: array [TFormat] of TGUID = (
    IEins{3}, IZwei
  );
{3} [DCC Fehler]: E2010 Inkompatible Typen: 'TGUID' und 'AnsiString'

Versuch 2:
Delphi-Quellcode:
const
  Schnittstellen: array [TFormat] of AnsiString = (
    IEins{4}, IZwei
  );
{4} [DCC Fehler]: E2010 Inkompatible Typen: 'AnsiString' und 'TGUID'

Alternativ ist es möglich eine Variable zu deklarieren und sie dann im Quelltext zu füllen. Mir geht es aber ausdrücklich um eine Konstante. Wie geht's?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: typisierte Konstante definieren: const C: array [...] of TGUID = (...);

  Alt 16. Aug 2012, 08:44
Was ist der Unterschied zwischen den Datentypen TGUID, String, Interfacedeklaration und Interface?

Du kannst imho keine Konstantendeklaration eines Interfaces (bzw. einer Instanz) vornehmen.

Deklariere das Array als global und erzeuge die Instanzen im Initialisierungsabschnitt deiner Unit. Wenn Du global=böse setzt, dann bastel dir eine statische Klasse, die das Array als Klassenvariable deklariert, kommt aber aufs gleiche raus.
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: typisierte Konstante definieren: const C: array [...] of TGUID = (...);

  Alt 16. Aug 2012, 10:14
Ein Schnittstellentyp ein Typ, und damit keine Instanz. Ich hätte gern die Schnittstellentypen ähnlich herumgereicht, wie das bei Klassentypen geht (bspw. so: TFormatSchnittstelle = interface of IFormat; Formate: array [TFormat] of TFormatSchnittstelle = (IEins, IZwei); ). Leider scheint es, dass es einen solchen Typ nicht gibt. In diesem Fall hier zählt letztendlich, dass die Schnittstellenidentifikation, die GUID, verfügbar ist, die man Supports übergeben kann: Supports(Daten, Formate[F], Format) . Aber auch dafür scheint es keinen Typ zu geben, den man in einer Konstantendefinition verwenden könnte. Für eine Variable gibt es einen solchen Typ:
Delphi-Quellcode:
type
  TFormate = array [TFormat] of TGUID;
const
  Konstante: TFormate = (IEins, IZwei); {3}
var
  Variable: TFormate; { funktioniert }
begin
  Variable[ftEins] := IEins;
  Variable[ftZwei] := IZwei;
end;
{3} [DCC Fehler]: E2010 Inkompatible Typen: 'TGUID' und 'AnsiString' (wie im ersten Beitrag)

Ich hätte gern eine Konstante, damit der Kompiler darauf hinweist, dass die Zuordnung anpasst werden muss, wenn sich die Anzahl der Formate ändert.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#4

AW: typisierte Konstante definieren: const C: array [...] of TGUID = (...);

  Alt 16. Aug 2012, 11:12
Hi,

{3} ist nicht sehr komfortabel, geht aber:

Delphi-Quellcode:
type
  TFormate = array [TFormat] of TGUID;
const
  Konstante: TFormate = ('{3E88C3A1-8791-45C2-961D-41423855E863}', '{ED86F176-8E55-43BC-8BB2-8FAEB9E52D29}'); {3}
var
  Variable: TFormate; { funktioniert }
begin
  Variable[ftEins] := IEins;
  Variable[ftZwei] := IZwei;
end;
Gruß
Norman
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: typisierte Konstante definieren: const C: array [...] of TGUID = (...);

  Alt 16. Aug 2012, 12:36
Ich verwende dafür eine Interfacefactory, analog zu einer Classfactory.
Dahinter verbirgt sich einfach eine TInterfaceList, die in der Unit Cntnrs zu finden ist.
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#6

AW: typisierte Konstante definieren: const C: array [...] of TGUID = (...);

  Alt 16. Aug 2012, 12:50
Zitat:
Ich verwende dafür eine Interfacefactory, analog zu einer Classfactory.
Dahinter verbirgt sich einfach eine TInterfaceList, die in der Unit Cntnrs zu finden ist.
Bekommst du damit auch ggf. Fehlermeldungen beim Kompilern
Gruß
Norman
  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 15:03 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