关于对象得释放问题(100分)

  • 主题发起人 主题发起人 硬木花椒
  • 开始时间 开始时间

硬木花椒

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位富翁,这个变量vJE不需要释放吗?如果要释放,那是用什么方法呢?var
STempFileName:string;
vJE:OleVariant;
begin
STempFileName:=GetTempPathFileName;
try
vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
format(SConnectionString,[STempFileName,APassWord]));
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);
except
result:=false;
end;
end;


 
vJE := nil;
 
看这代码怎么这么眼熟?
建立OLE对象,函数结束OLE对象超过作用域自动释放
这个函数的原始版本在
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1268352
里面有详细的注释
 
vJE := Unassigned;
保险点:)
 
这段代码是论坛里的,我使用了一下,但是在审核代码的时候发现这个对象创建后没有释放代码
,我就是想知道这里为什么不释放:是忘记了,还是像ysai大侠所说,自动释放?
》》不能赋值为nil,类型不相同。
》》我试了unassigned,不能辨认这个标识符啊~~~
 
不需要释放
var
vJE:OleVariant;
begin
vJE:=CreateOleObject('JRO.JetEngine');
end;

delphi生成的代码如下
...
lea eax, [ebp-$14]
call @IntfClear
lea eax, [ebp-$10]
call @VarClr
ret
 
非常感谢各位大侠,散分~~~
 
后退
顶部