Delphi 使用CreateOleObject后释放OleVariant
下面是一个简单的代码:Delphi 使用CreateOleObject后释放OleVariant,delphi,activexobject,Delphi,Activexobject,下面是一个简单的代码: procedure Test; var V: OleVariant; begin V := CreateOleObject('ADOX.Catalog'); try // do something with V... finally V := Unassigned; // do we need this? end; end; 我们是否需要在末尾使用V:=Unassigned代码,或者V在Test程序的范围内是免费的? 在VB中,将变量
procedure Test;
var
V: OleVariant;
begin
V := CreateOleObject('ADOX.Catalog');
try
// do something with V...
finally
V := Unassigned; // do we need this?
end;
end;
我们是否需要在末尾使用V:=Unassigned
代码,或者V
在Test
程序的范围内是免费的?
在VB中,将变量设置为“无”。我们需要在这里做同样的事情吗?
即:
OleVariant
将在界面超出范围时自动释放界面。如果需要提前发布,您可以将新值分配给OleVariant
。如何验证?当OleVariant
被分配给Unassigned
或Null
时会发生什么情况?使用调试“dcu”进行编译,并在variants.pas中的过程上设置断点将任何值分配给OleVariant
(或Variant
)在分配新值之前,将自动释放OleVariant
当前保留的任何数据。这包括取消分配动态字符串/数组、释放接口指针等。编译器不会对OleVariant
调用\u IntfClear()
。OleVariant
是OLEVARIANT
记录的包装,因此只能使用OLE支持函数(VariantInit()
,VariantClear()
等)进行管理。当一个OleVariant
超出范围时,编译器应该调用VariantClear()
\u IntfClear()
用于释放Delphi风格的接口变量,而OleVariant
则不是。至于编码实践,除非您需要重用变量,或者有充分的理由手动释放/回收OleVariant
的内存,否则您应该让OleVariant
超出范围。
function VarNothing: IDispatch;
// emulate VB function SET VarX = Nothing
var
Retvar: IDispatch;
begin
Retvar := nil;
Result := Retvar;
end;
// do something with V and finally:
V := VarNothing;