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.