我正在使用TXMLDocument编写一个XML,该字符串用于web服务器。当服务器接收到请求时创建组件,生成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服务器在此异常之后未能将数据返回给客户端--但我假设这是另一个原因/效果问题。
由于web服务器是多线程的,而CoInitialize(nil)是COM的,所以在此处理程序中调用PS - CoUninitialize和TXMLDocument。
发布于 2013-08-03 16:21:13
它在constructor's引用中有说明:
在没有所有者的情况下在运行时创建的TXMLDocument组件将在释放对其IXMLDocument接口的所有引用时自动释放。
由于您在Owner构造函数调用中没有指定任何TXMLDocument,所以不应该自己释放它。
https://stackoverflow.com/questions/18034839
复制相似问题