![]() |
Interface und zweimaliger Methodenaufruf
hI!
Ich steh offenbar grad auf meinem eigenen Schlauch. Kann mir jemand einen Tip geben, warum in folgendem
Delphi-Quellcode:
der zweite Click auf den Go-Button zu einer Verletzung fuehrt? Unversehrt bleibt alles, wenn
unit InterfaceSpaszUnit;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type IMyIF = Interface(IInterface) function GetLength(i: Integer): Integer; end; TMyExample = class(TInterfacedObject, IMyIF) private FEinFeld: array of array of Integer; public constructor Create(); overload; function GetLength(i: Integer): Integer; end; TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } MyExample: TMyExample; function GetWert(bsp: IMyIF): String; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { TMyExample } constructor TMyExample.Create; var i: Integer; begin inherited Create; SetLength(FEinFeld, 2); for i := 0 to Length(FEinFeld) - 1 do SetLength(FEinFeld[i], i); end; function TMyExample.GetLength(i: Integer): Integer; begin Result := Length(FEinFeld[i]); end; { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin MyExample := TMyExample.Create; end; function TForm1.GetWert(bsp: IMyIF): String; begin Result := IntToStr(bsp.GetLength(1)); end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetWert(MyExample)); end; procedure TForm1.Button2Click(Sender: TObject); begin Close; end; end.
Delphi-Quellcode:
als Argument
function GetWert(bsp: IMyIF): String;
Delphi-Quellcode:
bekommen soll.
TMyExample
Ich grueble, warum nur!? Vorschuszdank & Abschied, Berni |
Re: Interface und zweimaliger Methodenaufruf
Beim ersten Verlassen von TForm1.GetWert() schlägt die automatische Referenzzählung von Interfaces zu, und das Objekt wird freigegeben, weil es keinen weiteren Verweis auf das Interface gibt. Beim zweiten Aufruf gibt es dann das Objekt nicht mehr.
Wenn Du MyExample als IMyIF deklarierst, sollte es funktionieren, weil es dann auch nach Verlassen von GetWert() einen Verweis auf das Interface gibt. jkr |
Re: Interface und zweimaliger Methodenaufruf
hI!
Vielen Dank fuer die schnelle Antwort -- sie hat mir geholfen. Das Problem hatte ich natuerlich vereinfacht dargestellt. In Wirklichkeit sollen mehrere (ein und das selbe Interface implementierende) Klassen ueber dieses Interface angesprochen werden. Die haben nun alle nen Wrapper und alles ist fein. Dank nochmal, Berni |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 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