Текущий архив: 2009.05.10;
Скачать: CL | DM;
Вниз
GetInterface и возврат интерфейсов Найти похожие ветки
← →
Darvin (2009-03-30 11:44) [0]У меня есть некий класс, который реализует некий интерфейс. По запросам клиентов (неких программных модулей) он раздает функционал в виде интерфейсов. Клиенты могут по своему разумению освобождать данные интерфейсы.
Делаю следующим образом:type
ITest = interface
["{00CA209B-5FB2-4EDA-952C-4C286F59EF9B}"]
function GetNumber : Integer;
end;
TTest = class (TInterfacedObject, ITest)
private
FValue : Integer;
function GetNumber : Integer;
public
constructor Create;
end;
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
FTest : TTest;
end;
var
Form1: TForm1;
implementation
constructor TTest.Create;
begin
FValue := 0;
end;
function TTest.GetNumber: Integer;
begin
Inc(FValue);
Result := FValue;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Test : ITest;
begin
if FTest = nil then
FTest := TTest.Create;
FTest.GetInterface(Itest, Test);
Label1.Caption := IntToStr ( Test.GetNumber );
end;
Первый вызов проходит нормально, при втором - AV В чем может быть проблема?
← →
Darvin (2009-03-30 11:45) [1]Да, забыл сказать, сбой в строке
FTest.GetInterface(Itest, Test);
← →
Сергей М. © (2009-03-30 12:18) [2]При втором вызове не выполняется условие FTest = nil, соответственно объект не создается.
А объект, созданный при первом вызове, был уничтожен при выходе переменной Test: ITest из области видимости.
← →
Darvin (2009-03-30 12:25) [3]Спасибо. Я думал, что это правило не распространяется на GetInterface, а работает только тогда, когда создаешь так:
var
Test : ITest;
...
Test := TTest.Create;
Страницы: 1 вся ветка
Текущий архив: 2009.05.10;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.009 c