我正在使用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。
答案 0 :(得分:9)
constructor's
参考文献中说明了这一点:
在没有所有者的情况下在运行时创建的TXMLDocument组件 当所有引用它们的IXMLDocument时自动释放 界面发布。
由于您在Owner
构造函数调用中未指定TXMLDocument
,因此不应自行发布。