Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi dynamischer Aufruf von Interface-Methoden (https://www.delphipraxis.net/66691-dynamischer-aufruf-von-interface-methoden.html)

Meniskusschaden 2. Apr 2006 17:38


dynamischer Aufruf von Interface-Methoden
 
Hallo,

ich beschäftige mich gerade mit Delphi-Interfaces. Dabei habe ich
Schwierigkeiten, die Methoden der implementierten Interfaces eines
Objektes aufzurufen, wenn dieses Objekt einer Variablen zugewiesen
ist, die das Interface nicht implementiert.

Ich habe folgendes Interface erstellt:

Delphi-Quellcode:
unit Unit2;

interface

type
  IInterface1 = interface
    ['{5FD5F41E-E71F-41B2-946B-5A06404E74FF}']
    function getName: string;
  end;

  TKlasseA = class(TInterfacedObject, IInterface1)
    function getName: string;
  end;

implementation

function TKlasseA.getName: string;
begin
   result := 'Klasse A';
end;

end.
Wenn ich versuche, folgendes zu kompilieren, erhalte ich die
Fehlermeldung "E2015 Operator ist auf diesen Operandentyp nicht
anwendbar":

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  var
    myObject: TObject;
begin
  myObject := TKlasseA.Create;
  Button1.Caption := (myObject as IInterface1).getName;
end;
Hat jemand eine Idee, wie man die Methode getName für das
Objekt myObject korrekt aufruft?

Gruss,
Martin

Basilikum 2. Apr 2006 17:56

Re: dynamischer Aufruf von Interface-Methoden
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  var
    myObject: TObject;
    myIntf : IInterface1;
begin
  myObject := TKlasseA.Create;

  If Supports(myObject,IInterface1,myIntf) Then
    Button1.Caption := myIntf.getName;
end;
(funktioniert aber nur bei Interfaces mit GUID {aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee})

Meniskusschaden 2. Apr 2006 18:26

Re: dynamischer Aufruf von Interface-Methoden
 
Funktioniert super. Vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 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