释放时TXMLDocument'无效指针操作'

时间:2013-08-03 16:19:15

标签: xml delphi exception delphi-xe2

我正在使用TXMLDocument来编写在Web服务器中使用的XML字符串。当服务器收到请求,生成XML,将其传递回客户端,然后组件被释放时,就会创建组件。但是,当此组件免费时,我会获得Invalid pointer operation

  XML:= TXMLDocument.Create(nil);
  try
    XML.Active:= True;
    nRoot:= XML.AddChild('topics');
    for X := 0 to FCHM.Topics.Count - 1 do begin
      nTopic:= nRoot.AddChild('topic');
      //Add more data...

    end;
    Response.ContentText:= XML.XML.Text;
    Response.ContentType:= 'text/xml';
    XML.Active:= False;
  finally
    XML.Free; //<-- Invalid pointer operation
  end;

为什么我得到这个以及如何摆脱它?

奇怪的是,尽管我可以确认Response.ContentText确实获得了XML,但由于某种原因,Web服务器在此异常后无法将此数据返回给客户端 - 但我认为这是另一个原因/效果问题。

PS - CoInitialize(nil)CoUninitialize围绕此处理程序调用,因为Web服务器是多线程的,TXMLDocument是COM。

1 个答案:

答案 0 :(得分:9)

constructor's参考文献中说明了这一点:

  

在没有所有者的情况下在运行时创建的TXMLDocument组件   当所有引用它们的IXMLDocument时自动释放   界面发布。

由于您在Owner构造函数调用中未指定TXMLDocument,因此不应自行发布。