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