![]() |
Delphi-Version: XE2
Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
Moin!
Ich bekomme folgende Compilerwarnung: [dcc64 Warnung] Unit1.pas(13): W1025 Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut'
Delphi-Quellcode:
Muss man die GUID hier nochmal als quasi String-Konstante angeben? Find ich bissi unübersichtlich...
const
IID_Module: TGUID = '{ED91D3E0-912C-4B0B-9160-257D21399160}'; type ImyModule = interface(IInterface) [IID_Module] // <-- Hier die Warnung {...} end; Grüße Cody PS: Delphi XE4 aber mehr als XE2 kann man hier nicht angeben ;-) |
AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
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
Delphi-Quellcode:
mit dem Namen
TCustomAttribute
Delphi-Quellcode:
und
IID_Module
Delphi-Quellcode:
und findet sie nicht. Daher die Warnung.
IID_ModuleAttribute
Das Attribut würde sich übrigens dann auch nicht auf das Interface, sondern die erste Methode im Interface beziehen. |
AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
Zitat:
Zitat:
|
AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
Er meint die Mehrfachauswahl "Sprache" im Unterforum "Object-Pascal / Delphi-Language". Nach XE2 kommt nichts mehr...
|
AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
Zitat:
|
AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
Du könntest mal probieren, ob der Fehler weg ist, wenn du
Delphi-Quellcode:
wegläßt.
(IInterface)
Ohne Angabe ist es eh automatisch implizit davon abgeleitet. Und nein, du kannst den GUID auch direkt da hinschreiben.
Delphi-Quellcode:
Theoretisch kann man den GUID auch weglassen, dann wird vom Compiler einer generiert, aber halt jedesmal ein Anderer
type
ImyModule = interface ['{ED91D3E0-912C-4B0B-9160-257D21399160}'] {...} end; 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. |
AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
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. |
AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
Zitat:
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; |
AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
Zitat:
Delphi-Quellcode:
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.
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; So ist das nach außen komplett generisch gekapselt und ich brauche keine GUID-Konstanten oder ähnliche Krücken. |
AW: Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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