![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GetInterface и возврат интерфейсов [D5, XP]
Darvin © (2009-03-30 11:44:00)У меня есть некий класс, который реализует некий интерфейс. По запросам клиентов (неких программных модулей) он раздает функционал в виде интерфейсов. Клиенты могут по своему разумению освобождать данные интерфейсы.
Делаю следующим образом:
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 12:25:00) [1]Спасибо. Я думал, что это правило не распространяется на GetInterface, а работает только тогда, когда создаешь так:
var
Test : ITest;
...
Test := TTest.Create;
Сергей М. (2009-03-30 12:18:00) [2]При втором вызове не выполняется условие FTest = nil, соответственно объект не создается.
А объект, созданный при первом вызове, был уничтожен при выходе переменной Test: ITest из области видимости.
Darvin (2009-03-30 11:45:00) [3]Да, забыл сказать, сбой в строке
FTest.GetInterface(Itest, Test);