【发布时间】:2011-07-05 10:37:22
【问题描述】:
我有一个像这样的简单自动化类:
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 接收器的 com 对象的生命周期?
问题在于程序:测试有时会在未分配的“变量”上运行。 当我删除该行时:Variable.Free;尽管 dllhost.exe 的内存使用量增加了,但它仍然可以正常工作。
为什么会发生这样的事情?
编辑:
因为我无法回答自己的问题。我在这里做这个。
问题解决了。
该类正在分配全局变量。我没注意到。
这是另一个变量被覆盖的问题。
感谢您的帮助!
【问题讨论】:
-
为什么不在构造函数中创建
Variable?另外,TClass是什么? -
我猜你是在 COM+ 中运行它,所以你可以继承
TMtsAutoObject而不是TAutoObject并使用 OnActivate 和 OnDeactivate 来创建/释放你的变量。这就是我对常规 COM+ 对象所做的。我没有用 MSMQ 监听器尝试过。 -
@Marjan Venema 因为作为来宾用户(我假设)我得到的信息是 6 小时或更长时间后我能够做到这一点:) 这很荒谬,但对此无能为力:)
-
@John:啊!谢谢你让我知道。好吧,我猜是创建帐户的另一个原因:-)
标签: delphi object automation ole