在使用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;