xml - 释放时 TXMLDocument 'Invalid pointer operation'

标签 xml delphi exception delphi-xe2

我正在使用 TXMLDocument 编写一个在网络服务器中使用的 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,但出于某种原因,网络服务器在此异常后无法将此数据返回给客户端 - 但我假设这是一个不同的因果问题。

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

最佳答案

它在 constructor's 中说明引用:

TXMLDocument components that are created at runtime without an owner are freed automatically when all references to their IXMLDocument interface are released.

由于您在TXMLDocument 构造函数调用中没有指定Owner,因此您不应自行释放它。

关于xml - 释放时 TXMLDocument 'Invalid pointer operation',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034839/

相关文章:

Python:为每个引发的异常做一些事情

c++ - self 强加的 try/catch 不需要的整数

java - 解析对java对象的soap xml响应

c++ - 如何让xml解析器更清晰

delphi - 连接 Windows 服务中的映射驱动器盘符

sql-server - SSPI 和 SQL Server Windows 身份验证

java - Android - 动态访问xml资源

android - 找不到属性 'showAsAction' 的资源标识符

windows - 如何通过 HTTP 从 Internet 检索文件?

haskell - 如何在 Haskell 中编写错误类型?