Thema: Delphi Ableiten von Interfaces

Einzelnen Beitrag anzeigen

paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#1

Ableiten von Interfaces

  Alt 5. Nov 2006, 20:26
Anbei ein kleines Beispiel was mir zu schaffen macht...

Was ich wollte:
Ein Interface welches die Grundlegenden Funktionen anbietet
Mehrere Interfaces die davon abgeleitet werden, die speziellere Funktionen haben und dann implementiert werden in den entsprechendnen Klassen

Das Problem ist aber, dass Delphi mir aber nicht mehr erlaubt auf das erste Interface zu casten, sondern eine "Interface not Supported" Exception wirft, obwohl das Interface welches implementiert wurde, ja von dem auf das ich casten will abgeleitet wurde.

Wenn ich die Klasse so gestalte:
 TObject2 = class(TInterfacedObject, IInterface1, IInterface2) Dann klappt alles... nur erschließt sich mir nicht, wieso das andere falsch ist.

Danke für eure Antworten.

paresy


VCL Applikation mit Button drauf
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
 IInterface1 = interface(IUnknown)
 ['{72523EAC-6949-48A8-B3BC-4B795472A85B}']
  procedure Foo;
 end;

 IInterface2 = interface(IInterface1)
 ['{04197A80-7EFF-460C-BB53-322C276233CF}']
  procedure Bar;
 end;

 TObject2 = class(TInterfacedObject, IInterface2)
  public
   procedure Foo;
   procedure Bar;
 end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TObject2.Foo;
begin
 //
end;

procedure TObject2.Bar;
begin
 //
end;

procedure TForm1.Button1Click(Sender: TObject);
var obj: IUnknown;
begin

 obj := TObject2.Create() as IUnknown;

 (obj as IInterface1).Foo; //Interface not Supported

end;

end.
  Mit Zitat antworten Zitat