【问题标题】:Releasing Variable used by WebServiceWebService 使用的释放变量
【发布时间】:2012-12-06 11:50:54
【问题描述】:

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

我正在使用这个表格:

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

在我关闭Form的时候出现了错误,发现在我声明这部分的时候:

Trinity: = HttpPrincipal as CADServices;

我认为它被卡在了内存中。

错误如下:

“无效指针” 当您关闭表单时发生错误,在 OnClose 或 OnDestroy 表单中没有任何事件。

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

【问题讨论】:

  • 三位一体必须销毁变量,代码是真的,“CADServices”是我的WebService的单位。
  • 何塞·爱德华多,他的意思是 Trinity := HttpPrincipal the CadServices; 类似于一些伪代码,而不是真正的 Delphi 代码。
  • 我的借口是一个错误,代码是Trindade := HttpPrincipal as CADServices;
  • 我希望在您编辑问题并修复所有错误之前,没有人会帮助您。细节很重要。修复实际错误。发布真实代码而不是假代码。修正格式。
  • 同时添加 HttpPrincipal 和 CadServices 的定义,我们无法读取您屏幕上的内容。

标签: web-services delphi delphi-xe2


【解决方案1】:

尝试在运行时创建 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 单元)

【讨论】:

  • 无济于事,值得记住的是Trinity: = HttpPrincipal as CADServices;这在主窗体 OnCreate 中调用
  • @JoseEduardo 就像我之前说的,只要你忽略这些细节,你就会得到一个好的答案的机会很小
  • 但是如果设置了 HttpPrincipal 的所有者,它不应该被释放。更多代码肯定会有所帮助——尤其是与 HttpPrincipal 的创建和销毁相关的
  • @SirRufo:正如 OP 问题下的 cmets 中所述,它是一个设计时组件
  • 你能告诉我这是在哪里写的吗?也许我是盲人......但我找不到它......
猜你喜欢
  • 2021-01-07
  • 1970-01-01
  • 2013-01-03
  • 2016-01-09
  • 1970-01-01
  • 2017-09-07
  • 2014-12-17
  • 2011-01-26
  • 2016-06-15
相关资源
最近更新 更多