5

我正在使用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。

4

1 回答 1

9

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

当所有对其 IXMLDocument 接口的引用都被释放时,在运行时创建的没有所有者的 TXMLDocument 组件会被自动释放。

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

于 2013-08-03T16:21:13.303 回答