1

如何释放 WebService 正在使用的变量。

我正在使用这种形式:

 HttpPrincipal.WSDLLocation: = FrmPrincipal.edtWS.Text;
 HttpPrincipal.Service: = 'CADServicesService'; 
 HttpPrincipal.Port := 'CADServices';     
 Trinity: = HttpPrincipal as CADServices;

在我将关闭Form的那一刻出现错误,发现当我声明这部分时:

Trinity: = HttpPrincipal as CADServices;

我认为它被卡在了记忆中。

错误如下:

"Invalid Pointer" 关闭窗体时发生错误,在 OnClose 或 OnDestroy 窗体中没有任何事件。

说明: Trinity : CADServices, HttpPrincipal is a THTTPRIO, CADServices is my Unit containing all procedures / functions from WebService.

4

1 回答 1

3

尝试在运行时创建 HTTPRIO,而不是使用设计时组件:

function GetCadServices(Addr : String): CadServices;
const
  defSvc  = 'CADServicesService';
  defPrt  = 'CADServices';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  RIO := THTTPRIO.Create(nil)  
  try
    Result := (RIO as CadServices);
    RIO.WSDLLocation := Addr;
    RIO.Service := defSvc;
    RIO.Port := defPrt;
  finally
    if (Result = nil) then
      RIO.Free;
  end;
end;

用法:

Trinity := GetCadServices(FrmPrincipal.edtWS.Text);

如果您使用 WSDL 导入器导入 WSDL,则会自动为您生成此代码(查看 CadServices1 单元)

于 2012-12-06T14:27:55.023 回答