Tôi đang sử dụng TXMLDocument
để viết một chuỗi XML được sử dụng trong máy chủ web. Thành phần được tạo ra khi máy chủ nhận được yêu cầu, tạo ra XML, chuyển nó trở lại cho máy khách, sau đó thành phần đó là free'd. Tuy nhiên, khi thành phần này là miễn phí, tôi nhận được Invalid pointer operation
.TXMLTài liệu 'Thao tác con trỏ không hợp lệ' khi giải phóng
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;
Tại sao tôi nhận được điều này và làm thế nào để loại bỏ nó?
Thật kỳ lạ, mặc dù tôi có thể xác nhận rằng Response.ContentText
thực tế nhận được XML, vì lý do nào đó máy chủ web không trả lại dữ liệu này cho khách hàng sau ngoại lệ này - nhưng tôi cho rằng đó là nguyên nhân/vấn đề khác .
PS - CoInitialize(nil)
và CoUninitialize
được gọi xung quanh trình xử lý này vì máy chủ web đa luồng và TXMLDocument
là COM.
Chà, tôi chưa bao giờ mong đợi điều đó xảy ra. Cảm ơn bạn đã chỉ ra điều đó. –
Hoặc, bạn nên sử dụng hàm Delphi có cho mục đích đó: 'iDoc: = NewXMLDocument;' trong đó 'iDoc' là biến của kiểu' IXMLDocument'. – pf1957
Bạn được chào đón. Dù sao, thay vào đó, bạn có thể khai báo biến 'XML' của bạn thành' IXMLDocument' và tạo một tài liệu mới gọi ['NewXMLDocument'] (http://docwiki.embarcadero.com/Libraries/XE2/en/Xml.XMLDoc. NewXMLDocument). – TLama