Я использую TXMLDocument
для записи XML-строки, которая используется на веб-сервере. Компонент создается, когда сервер получает запрос, создает XML, передает его обратно клиенту, затем компонент свободен. Однако, когда этот компонент свободен, я получаю Invalid pointer operation
.TXMLDocument «Недопустимая операция указателя» при освобождении
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
вызываются вокруг этого обработчика, так как веб-сервер многопоточен, а TXMLDocument
- COM.
Ничего себе, я бы никогда не ожидал, что так будет. Спасибо что подметил это. –
Или вы должны использовать функцию Delphi для этой цели: 'iDoc: = NewXMLDocument;' где 'iDoc' является переменной типа' IXMLDocument'. – pf1957
Добро пожаловать. В любом случае, в качестве альтернативы вы можете объявить свою переменную 'XML' как« IXMLDocument »и создать новый вызов документа [' NewXMLDocument'] (http://docwiki.embarcadero.com/Libraries/XE2/en/Xml.XMLDoc. NewXMLDocument). – TLama