三层,服务器端在有客户连接的情况下关掉程序时,怎样避免Com Server Warning对话框出现(50分)

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

labixiaoxin

Unregistered / Unconfirmed
GUEST, unregistred user!
如题。服务器端在有客户连接的情况下关掉程序时,会出现Com Server Warning
There are still active COM objects in this application.One or More Clients
may have references to these objects,So manually closing this application
may cause these client application(s) to fail.
Are you sure you want to close this application.
怎样让这样的对话框不出现。比如找到与这个有关的PAS文件,去掉这个对话框,或发消息强制按“YES”。
 
学习学习
 
这个解决问题的思路是错误的!
正常情况下,根本就不应该这么做,最后一个连接关闭、服务器程序就自动退出了。难道你遇到的问题是不能自动关闭?一般来说,如果不能自动结束,就是对接口对象循环引用和依赖的原因了。
调试就无所谓了。
 
CoDisconnectObject
使用这个方法去释放你的COM对象就可以了.
 
我们公司的COM不知道怎么老是不释放内存,80多客户有时会连接不上服务器。没有办法只有强制关闭,每天3点强制结束DLLHOST.exe,就是那个KILLTASK就行了,可以说后面再没出过客户连接不上的问题。所有的数据提交都要用事务,才可以后样,不会事务会丢数据的
 
修改ComServ.pas(在source/rtl/common下),把原来的
function AutomationTerminateProc: Boolean;
begin
Result := True;
if (ComServer <> nil) and (ComServer.ObjectCount > 0) and ComServer.UIInteractive then
begin
Result := MessageBox(0, PChar(SNoCloseActiveServer1 + SNoCloseActiveServer2),
PChar(SAutomationWarning), MB_YESNO or MB_TASKMODAL or
MB_ICONWARNING or MB_DEFBUTTON2) = IDYES;
end;
end;
改为
function AutomationTerminateProc: Boolean;
begin
Result := True;
if (ComServer <> nil) and (ComServer.ObjectCount > 0) and ComServer.UIInteractive then
begin
Result := true;
end;
end;
再把这个文件加到自己的工程中,重新编译即可。
 
接受答案了.
 
后退
顶部