Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.012 c
15-1235986259
Nameziz
2009-03-02 12:30
2009.05.10
связь Программирования и Математики


15-1235938698
TInt
2009-03-01 23:18
2009.05.10
Можно ли сделать чтоб класс менял размер массива не зная его типа


10-1153747700
Calibr2
2006-07-24 17:28
2009.05.10
Как связать OleVariant с CorelDRAW?


3-1220598203
cstor
2008-09-05 11:03
2009.05.10
Как записать текст, в текстовое поле таблицы Paradox 7


2-1238409167
korefey
2009-03-30 14:32
2009.05.10
ActiveX проверка запущеного приложения word