gpt4 book ai didi

delphi - 我需要在 Delphi 中免费 IDispatch

转载 作者:行者123 更新时间:2023-12-03 15:48:23 25 4
gpt4 key购买 nike

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

type
IUtility = interface(IDispatch);

var
obj: IUtility;

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


// doesnot work
VariantClear(obj);
end;

最佳答案

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

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

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

obj := nil;

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

关于delphi - 我需要在 Delphi 中免费 IDispatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com