AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
Thema durchsuchen
Ansicht
Themen-Optionen

Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

Ein Thema von Codehunter · begonnen am 9. Okt 2013 · letzter Beitrag vom 9. Okt 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

  Alt 9. Okt 2013, 11:59
Delphi-Version: XE2
Moin!

Ich bekomme folgende Compilerwarnung:

[dcc64 Warnung] Unit1.pas(13): W1025 Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut'
Delphi-Quellcode:
const
  IID_Module: TGUID = '{ED91D3E0-912C-4B0B-9160-257D21399160}';

type
  ImyModule = interface(IInterface)
  [IID_Module] // <-- Hier die Warnung
    {...}
  end;
Muss man die GUID hier nochmal als quasi String-Konstante angeben? Find ich bissi unübersichtlich...

Grüße
Cody

PS: Delphi XE4 aber mehr als XE2 kann man hier nicht angeben
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

  Alt 9. Okt 2013, 12:04
Wenn man die GUID da angeben will, ist es doch eigentlich klar dass es die GUID ist, oder?

Ich drücke immer nur STRG+Shift+G und denke nicht weiter drüber nach

Ansonsten werden so in den Klammern Attribute angegeben. Der Compiler sucht nach Subklassen von TCustomAttribute mit dem Namen IID_Module und IID_ModuleAttribute und findet sie nicht. Daher die Warnung.

Das Attribut würde sich übrigens dann auch nicht auf das Interface, sondern die erste Methode im Interface beziehen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

  Alt 9. Okt 2013, 12:05
Muss man die GUID hier nochmal als quasi String-Konstante angeben? Find ich bissi unübersichtlich...
Ja. Evtl. erfährt ja der Compiler mit dem neuen LLVM-Compiler eine erweiterung.

PS: Delphi XE4 aber mehr als XE2 kann man hier nicht angeben
Wieso? Bei dir steht doch XE4?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

  Alt 9. Okt 2013, 12:06
Er meint die Mehrfachauswahl "Sprache" im Unterforum "Object-Pascal / Delphi-Language". Nach XE2 kommt nichts mehr...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

  Alt 9. Okt 2013, 12:15
Er meint die Mehrfachauswahl "Sprache" im Unterforum "Object-Pascal / Delphi-Language". Nach XE2 kommt nichts mehr...
Ah. Stimmt. Da muss mohl der Forenknecht mal ran
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

  Alt 9. Okt 2013, 12:17
Du könntest mal probieren, ob der Fehler weg ist, wenn du (IInterface) wegläßt.
Ohne Angabe ist es eh automatisch implizit davon abgeleitet.

Und nein, du kannst den GUID auch direkt da hinschreiben.
Delphi-Quellcode:
type
  ImyModule = interface
  ['{ED91D3E0-912C-4B0B-9160-257D21399160}']
    {...}
  end;
Theoretisch kann man den GUID auch weglassen, dann wird vom Compiler einer generiert, aber halt jedesmal ein Anderer
und man kann ein Objekt nicht mehr fragen, ob es das Interface bereitstellt.

Mit Strg+Shift+G die GUID zu erstellen ist auch nett, falls man keine Lust hat sich selber was auszudenken, bzw. wenn man kein bestimmtes Muster benötigt.


Die Attribute werden "zuällig" genauso definiert, also mit den eckigen Klammern.
irgendwas bringt da der Compiler wohl durcheinander.
bezüglich der Warnung: Also der Compiler macht erstmal weiter, hört dann aber später in der Unit auf mt arbeiten und es kommt kein Programm raus?
Nja, was dir da bleibt, wäre eine Meldungs ans QC und auf den Bugfix warten.
Eventuell kann es aber auch schon helfen, wenn du in den Codes über deinem Interface ein paar Leerzeilen änderst, oder dir Reihenfolge von anderen Typen ... manchmal sind dann derartige Compiler-Bugs plötzlich weg.
$2B or not $2B

Geändert von himitsu ( 9. Okt 2013 um 12:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

  Alt 9. Okt 2013, 12:40
Ich glaub, ich hab mich da ein bisschen missverständlich ausgedrückt. Die Unit ist die gemeinsame Interface-Deklaration zwischen einem Hauptprogramm und einer DLL. Im Hauptprogramm will ich die GUID ja ausdrücklich als Konstante haben für QueryInterface usw.

Klar kann ich die GUID einmal per STRG+Shift+G für den const-Bereich erzeugen und dann per Copy&Paste runter in die Interface-Deklaration kopieren. Aber wenn ich oben schon mal so eine schöne Konstante habe, warum nicht unten auch als Konstante verwenden? Sprich: Vermeidung von redundanten GUID-Angaben. Dass ich es dort direkt als GUID angeben KANN ist mir schon klar, nur dass ich es MUSS war mir nicht bewusst. Zumal lustigerweise der Code trotzdem funktioniert, nur eben mit einer Compilerwarnung.

Bzgl. XE4: Ich meinte die Auswahlliste beim Erstellen des Threads. Eigentlich könnte man die doch ganz weg lassen, man hats doch in seinem Userprofil oder man schreibt eine abweichende Version ausdrücklich ins Post.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter ( 9. Okt 2013 um 12:43 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

  Alt 9. Okt 2013, 13:52
Muss man die GUID hier nochmal als quasi String-Konstante angeben? Find ich bissi unübersichtlich...
Schau beispielsweise mal in die Unit Winapi.StructuredQuery oder Winapi.Wincodec.
Dort siehst du eine gängige Lösung, mit der es sich leben lässt.

Anhand deines Beispiels:
Delphi-Quellcode:
const
  SID_Module : = '{ED91D3E0-912C-4B0B-9160-257D21399160}';
  IID_Module : TGUID = SID_Module;

type
  ImyModule = interface(IInterface)
  [SID_Module]
    {...}
  end;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

  Alt 9. Okt 2013, 13:56
Ich glaub, ich hab mich da ein bisschen missverständlich ausgedrückt. Die Unit ist die gemeinsame Interface-Deklaration zwischen einem Hauptprogramm und einer DLL. Im Hauptprogramm will ich die GUID ja ausdrücklich als Konstante haben für QueryInterface usw.
Das kommt mir irgendwie bekannt vor... ich habe das allerdings gleich generisch gelöst. Kurzfassung:
Delphi-Quellcode:
class function TFoo.Get<T>(const AParams: IFooParams): T;
var
  TypeGuid: TGuid;
begin
  TypeGuid := GetTypeData(TypeInfo(T)).Guid;
  Supports((Instance as TFoo).Host.GetIntfImplementation(TypeGuid, AParams), TypeGuid, Result);
end;
Sprich ich rufe diesen Getter mit dem gewünschten Interface als Typparameter und den dazu passenden Initialisierungsparametern als Methodenparametern auf. Dann hole ich mir darin die Guid, frage beim Host an, bekomme ein Interface zurück und wandele es mit Supports in den korrekten Typ um.

So ist das nach außen komplett generisch gekapselt und ich brauche keine GUID-Konstanten oder ähnliche Krücken.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut

  Alt 9. Okt 2013, 13:58
Dort siehst du eine gängige Lösung, mit der es sich leben lässt.
Jupp, funktioniert. So isses schön ordentlich Danke!
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:27 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