【问题标题】:Do I need to Free IDispatch in Delphi我需要在 Delphi 中释放 IDispatch
【发布时间】:2013-06-27 06:46:57
【问题描述】:

如何在 Delphi 中释放 IDispatch COM 对象?我必须这样做吗?

type
 IUtility = interface(IDispatch);

var
  obj: IUtility;

begin
  obj := CreateOleObject("Utility") as IUtility;


  // doesnot work
  VariantClear(obj);
end;

【问题讨论】:

    标签: delphi com variant


    【解决方案1】:

    IDispatch 就像所有其他接口一样。当实现它的对象看到其引用计数达到零时,它会自行销毁。

    Delphi 会在适当的时候自动插入代码以在接口上调用_AddRef_Release,包括当变量超出范围时。因此,在您的函数结束时,obj 将超出范围,编译器将自动插入代码以执行 if not Assigned(obj) then obj._Release

    由于它是自动发生的,因此您无需自己做任何事情。但是,如果您想在作用域自然结束之前放弃对接口对象的控制,您可以通过分配 nil 简单地清除该变量。

    obj := nil;
    

    您的obj 变量不是Variant 类型,这就是为什么在其上调用VariantClear 是错误的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2012-01-22
    相关资源
    最近更新 更多