TAutoObject в жизненном цикле Delphi ..? - PullRequest
0 голосов
/ 05 июля 2011

У меня есть простой класс автоматизации, подобный этому:

type
  TTest_COM = class(TAutoObject, ITest_COM)
  private
    Variable: TClass;
  protected
    procedure Test(parameters...); safecall;
  public
    procedure  Initialize; override;
    destructor Destroy; override;
  end;

implementation

destructor TTest_COM.Destroy;
begin
  Variable.Free;
  inherited;
end;

procedure TTest_COM.Initialize;
begin
  inherited;
  Variable := TClass.Create;
end;

procedure TTest_COM.Test(parameters...); safecall;
begin
  // this method makes use of "Variable"
end;

Может ли кто-нибудь объяснить мне жизненный цикл такого com-объекта, который действует как получатель msmq?

Проблема в том, чтоПроцедура: Тест иногда действует на невыделенной «Переменной».Когда я удаляю строку: Variable.Free;Это работает отлично, несмотря на то, что использование памяти для dllhost.exe растет.

Почему такие вещи случаются?

РЕДАКТИРОВАТЬ:

Потому что я не могуответь на мой вопрос.Я делаю это здесь.

Проблема решена.

Класс выделяет глобальную переменную.Я не заметил этого.

Это была проблема, что другая переменная была перезаписана.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 05 июля 2011

Автообъект должен быть освобожден, когда счетчик ссылок достигнет нуля.

Я подозреваю, что ошибка не в вашем коде, а в коде, который использует объект.В коде, который использует ваш объект, счетчик ссылок достигает нуля и уничтожается, но процедура Test все еще вызывается из этого кода на освобожденном объекте.Вот почему Test иногда работает с неназначенной переменной: объект TTest_COM уже уничтожен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...