У меня есть простой класс автоматизации, как это:TAutoObject в delphi lifecycle ..?
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;
Может кто-нибудь объяснить мне жизненный цикл такого объекта ком, который действует как MSMQ приемник?
Проблема в том, что процедура: Тест иногда срабатывает при отсутствии выделенной «переменной». Когда я удаляю строку: Variable.Free; Он работает отлично, несмотря на то, что использование памяти для dllhost.exe растет.
Почему такие вещи случаются?
EDIT:
Потому что я не могу ответить на мой собственный вопрос. Я делаю это здесь.
Проблема решена.
Класс выделял глобальную переменную. Я этого не заметил.
В этом была проблема с заменой другой переменной.
Благодарим за помощь!
Почему вы не создаете 'Variable' в конструкторе? Кроме того, что такое 'TClass'? –
Я предполагаю, что вы используете это в COM +, чтобы вы могли подклассифицировать 'TMtsAutoObject' вместо' TAutoObject' и использовать OnActivate и OnDeactivate для создания/освобождения переменной. Это то, что я делаю для обычного COM + объекта. Я не пробовал это с слушателем MSMQ. –
@ Марьян Венема, потому что, как гость (я полагаю), я получил информацию, что после 6 или более часов я могу это сделать :) Это смешно, но ничего не может с этим сделать :) – John