调用Excel在win98系统中如何彻底释放内存?(50分)

  • 主题发起人 主题发起人 lonesashimi
  • 开始时间 开始时间
L

lonesashimi

Unregistered / Unconfirmed
GUEST, unregistred user!
最开始我使用
ExcelApplication.quit;
excelworksheet.Disconnect;
excelworkbook.Disconnect;
ExcelApplication.disconnect;
宣告失败
后来编写了这段代码:
procedure TerminateOLE;
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
Ret : BOOL;
ProcessID : integer;
s:string;
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
while Ret do
begin
s:=ExtractFileName(FProcessEntry32.szExeFile);
if s='EXCEL.EXE' then
begin
ProcessID:=FProcessEntry32.th32ProcessID;
TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,ProcessID),1);
s:='';
end;
Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;
在win2000下确实杀掉了进程也不出什麽差错,
但在win98下多次连续调用Excel将死机。
请问如何才能保证程序在win98/me下彻底杀掉进程并释放内存。
不好意思,上坛时间短,所供点数微薄,还请海含
 
if you can getobject(excel.application) then you can delete it.
 
请蒸发密令详细介绍一下getobject(excel.application),谢谢
 
我原来作过,也没办法,UP
 
我不知道win98下到底会发生什么(快两年没有98了).我一般是这么用的
一般出现没有释放干净的原因是操作excel的过程中出了错误.但是只要最后
都执行下面的代码,应该是放干净的.
try
ExcelApplication.quit;
except
end; // 如果用户已经把excel给关了,quit时会出现一个异常
excelworksheet.Disconnect;
excelworkbook.Disconnect;
ExcelApplication.disconnect;
 
TerminateProcess()结束进程的方法极不稳定,这在MSDN上说得很清楚啊!
 
谢谢bluerain,ExcelApplication.quit方法确实不起作用。
谢谢YB_unique, 除此之外还有别的方法实现吗?
 
使用OLE释放的时候也存在这个问题,相比之下,Word好像就没有。
继续关注!
 
yzhshi:为什麽呢?难道调用Word和调用Excel有区别吗?
 
关注,
我现在改用Formula one来写Xls文件,再调用Excel来打开它。效果不错。
 
确实有这个感觉,也许仅仅是感觉。
我没有实际使用内存查看软件看是否存在。
因为调用Excel后再次调用打开的速度特别快。
而调用Word就不一样了。每次速度基本一致。
 
放假几天,家里的电脑拨号上不来,一直没有留言,请多多包涵。
YB_unique: 可以说得清楚点吗,TerminateProcess()结束进程的方法极不稳定具体指什麽,
与使用操作系统有什麽关系吗?另外,那里有MSDN。Thanks.
sundart:能说的具体些吗?Formula one我没有用过。
yzhshi:我使用win2000 +office 2000并没感觉到速度上的差别。
 
先执行一下EXCEL的析构函数如何?
 
HORNEY:EXCEL的析构函数如何?能说仔细点吗?
 
这是干什么啊,不就是Excel吗?做应用的东西干什么要动用系统呢?
Excel。quit了怎么再Disconnect呢?先后顺序要正确,quit以后free一下
不就行了?D6的Demos里面有去ActiveX目录里找找吧。
 
将Disconnect 和quit交换位置我试过,没有变化。free的方法同样释放不了Excel。
我想借此机会,大家是否能讨论一下win2000和win98两种操作系统的问题。希望大家继续。
 
井本人反复测试,这段代码还是起到作用的,就此结束此贴。谢谢大家的讨论。
procedure TerminateOLE;
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
Ret : BOOL;
ProcessID : integer;
s:string;
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
while Ret do
begin
s:=ExtractFileName(FProcessEntry32.szExeFile);
if s='EXCEL.EXE' then
begin
ProcessID:=FProcessEntry32.th32ProcessID;
TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,ProcessID),1);
s:='';
end;
Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;
 
樓上的做法會使得程序變慢
 
后退
顶部