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

Jer*_*dge 5 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;
Run Code Online (Sandbox Code Playgroud)

为什么我得到这个,我该如何摆脱它?

奇怪的是,虽然我可以确认Response.ContentText实际上确实获得了XML,但由于某种原因,Web服务器在此异常之后无法将此数据返回给客户端 - 但我认为这是一个不同的因果关系问题.

PS - CoInitialize(nil)并且CoUninitialize因为Web服务器是多线程的而且TXMLDocument是COM 而被调用此处理程序.

TLa*_*ama 9

它在constructor's参考文献中说明:

在释放对其IXMLDocument接口的所有引用时,在没有所有者的情况下在运行时创建的TXMLDocument组件将自动释放.

由于您OwnerTXMLDocument构造函数调用中指定了no ,因此不应自行释放它.

  • 仅仅删除免费是不够的.您必须引用该对象实现的接口.这意味着更改分配构造函数结果的变量的类型.通常为IXMLDocument. (2认同)