如何在Delphi中释放IDispatch COM对象?非做不可吗?
type
IUtility = interface(IDispatch);
var
obj: IUtility;
begin
obj := CreateOleObject("Utility") as IUtility;
// doesnot work
VariantClear(obj);
end;发布于 2013-06-30 01:15:09
IDispatch就像所有其他接口一样。当实现它的对象看到它的引用计数达到零时,它将销毁自己。
Delphi在适当的时候自动插入代码来调用接口上的_AddRef和_Release,包括当变量超出范围时。因此,在函数结束时,obj将超出作用域,编译器将自动插入代码,实际上是执行if not Assigned(obj) then obj._Release。
因为它是自动发生的,所以你不需要自己做任何事情。但是,如果您希望在作用域自然结束之前放弃对接口对象的控制,则可以通过分配nil来简单地清除该变量。
obj := nil;您的obj变量不是Variant类型,这就是为什么在它上调用VariantClear是错误的。
https://stackoverflow.com/questions/17382590
复制相似问题