在使用TWebconnection连接到DCom时发现,Com+中安装的组件对象激活的进程有几百个。
查了才发现,每次调用一下COM对象就创建一个导致的问题。查了很长时间,一直没发现问题出在什么地方。今天突然发现一个问题,就是如果直接手工释放WebConnection就会出现这种情况。COM对象会不被释放的问题,但不知道应该如果手工释放TWebConnection才能释放所调用的COM接口对象?各位高人,如果手工释放TWebConnection前需要先调用那些清场函数?小弟的环境
---------
Delphi 7
Windows XP sp3
IIS 5.1 TForm5 = class(TForm)
WebConnection1: TWebConnection;
btn1: TButton;
btn5: TButton;
procedure btn1Click(Sender: TObject);
procedure btn5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
// 这段代码是中的WebConnection1 的释放是直接由窗体负责释放。
procedure TForm5.btn1Click(Sender: TObject);
var
pDisp: IWoKoDisp;
begin
WebConnection1.URL := 'http://localhost/Scripts/SDSHTTPServer.dll';
WebConnection1.ServerGUID := GUIDToString(CLASS_WoKo);
pDisp := IWoKoDisp(WebConnection1.GetServer);
// 从服务端取个随机整数
mmo1.Lines.Add(IntToStr(pDisp.GetVal));
end;
// 这段代码是手动释放WebConnection ,就会出现COM对象不断增加的情况
procedure TForm5.btn5Click(Sender: TObject);
var
cConn:TWebConnection;
pDisp: IWoKoDisp;
begin
cConn := TWebConnection.Create(nil);
try
cConn.URL := 'http://localhost/Scripts/SDSHTTPServer.dll';
cConn.ServerGUID := GUIDToString(CLASS_WoKo);
pDisp := IWoKoDisp(cConn.GetServer);
// 从服务端取个随机整数
mmo1.Lines.Add(IntToStr(pDisp.GetVal));
pDisp := nil;
finally
cConn.Free;
end;
end;// 服务端只做了个简单的调用函数。
// 服务端TLB的接口申明,就一个GetVal获取一个1-99的随机整数。
IWoKo = interface(IAppServer)
['{35E2C1DD-1B0A-4E84-8CAE-4246752DD4FD}']
function GetVal: Integer; safecall;
end;
查了才发现,每次调用一下COM对象就创建一个导致的问题。查了很长时间,一直没发现问题出在什么地方。今天突然发现一个问题,就是如果直接手工释放WebConnection就会出现这种情况。COM对象会不被释放的问题,但不知道应该如果手工释放TWebConnection才能释放所调用的COM接口对象?各位高人,如果手工释放TWebConnection前需要先调用那些清场函数?小弟的环境
---------
Delphi 7
Windows XP sp3
IIS 5.1 TForm5 = class(TForm)
WebConnection1: TWebConnection;
btn1: TButton;
btn5: TButton;
procedure btn1Click(Sender: TObject);
procedure btn5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
// 这段代码是中的WebConnection1 的释放是直接由窗体负责释放。
procedure TForm5.btn1Click(Sender: TObject);
var
pDisp: IWoKoDisp;
begin
WebConnection1.URL := 'http://localhost/Scripts/SDSHTTPServer.dll';
WebConnection1.ServerGUID := GUIDToString(CLASS_WoKo);
pDisp := IWoKoDisp(WebConnection1.GetServer);
// 从服务端取个随机整数
mmo1.Lines.Add(IntToStr(pDisp.GetVal));
end;
// 这段代码是手动释放WebConnection ,就会出现COM对象不断增加的情况
procedure TForm5.btn5Click(Sender: TObject);
var
cConn:TWebConnection;
pDisp: IWoKoDisp;
begin
cConn := TWebConnection.Create(nil);
try
cConn.URL := 'http://localhost/Scripts/SDSHTTPServer.dll';
cConn.ServerGUID := GUIDToString(CLASS_WoKo);
pDisp := IWoKoDisp(cConn.GetServer);
// 从服务端取个随机整数
mmo1.Lines.Add(IntToStr(pDisp.GetVal));
pDisp := nil;
finally
cConn.Free;
end;
end;// 服务端只做了个简单的调用函数。
// 服务端TLB的接口申明,就一个GetVal获取一个1-99的随机整数。
IWoKo = interface(IAppServer)
['{35E2C1DD-1B0A-4E84-8CAE-4246752DD4FD}']
function GetVal: Integer; safecall;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货