5
我使用TXMLDocument
來編寫在Web服務器中使用的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,但出於某種原因,Web服務器無法在發生此異常後將此數據返回給客戶端 - 但我認爲這是一個不同的因果問題。
PS - CoInitialize(nil)
和CoUninitialize
是圍繞此處理程序調用的,因爲Web服務器是多線程的,而TXMLDocument
是COM。
哇,我從來沒有料到會是這樣。感謝您指出了這一點。 –
或者,您應該使用Delphi爲此目的的函數:'iDoc:= NewXMLDocument;'其中'iDoc'是IXMLDocument類型的變量。 – pf1957
不客氣。無論如何,作爲替代方案,您可以將'XML'變量聲明爲'IXMLDocument',並創建一個新的文檔調用['NewXMLDocument'](http://docwiki.embarcadero.com/Libraries/XE2/en/Xml.XMLDoc。 NewXMLDocument)函數。 – TLama