如何在Delphi中释放IDispatch COM对象?我需要吗?
type
IUtility = interface(IDispatch);
var
obj: IUtility;
begin
obj := CreateOleObject("Utility") as IUtility;
// doesnot work
VariantClear(obj);
end;
答案 0 :(得分:5)
IDispatch
就像所有其他接口一样。当实现它的对象看到它的引用计数达到零时,它将自行销毁。
Delphi会在适当的时间自动插入代码以在接口上调用_AddRef
和_Release
,包括变量超出范围时。因此,在函数结束时,obj
将超出范围,编译器将自动插入代码,基本上执行if not Assigned(obj) then obj._Release
。
由于它自动发生,您不需要自己做任何事情。但是,如果要在范围的自然结束之前放弃对接口对象的控制,则可以通过分配nil
来清除变量。
obj := nil;
您的obj
变量不属于Variant
类型,这就是为什么在其上调用VariantClear
是错误的。