使用此代碼獲取站點的rss。此代碼適用於我的電腦和許多其他電腦。但在某些電腦(Windows XP或7)中出現此錯誤:未安裝MSXMLXML:未安裝MSXML
我該如何解決這個問題?哪裏不對?
下面是代碼:
procedure My_Thread.Execute;
var
http : tidhttp;
strm : tmemorystream;
str,sTitle, sDec ,er : string;
StartItemNode : IXMLNode;
ANode : IXMLNode;
XMLDoc : IXMLDocument;
begin
http := tidhttp.Create();
strm := tmemorystream.Create;
try
http.Get('http://www.sample.com/rss.xml',strm); //Download the RSS file
SetString(str,PANSIChar(strm.Memory),strm.Size);
XMLDoc := LoadXMLData(str);
StartItemNode := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item');
ANode := StartItemNode;
i := 0;
repeat
inc(i);
sTitle := ANode.ChildNodes['title'].Text;
sDec := ANode.ChildNodes['description'].Text;
Synchronize(procedure begin //Synchronize? I'm using threads
case I of
1: begin
main_frm.edit1.text := sTitle; //main_frm is my form
main_frm.edit2.text := sDec;
end;
2: begin
main_frm.edit3.text := sTitle;
main_frm.edit4.text := sDec;
end;
3: begin
main_frm.edit5.text := sTitle;
main_frm.edit6.text := sDec;
end;
end;
ANode := ANode.NextSibling;
end);
until ANode = nil;
http.Free;
strm.Free;
except
on E: Exception do
begin
er := e.Message;
Synchronize(procedure begin
ShowMessage(er);
end);
end;
end;
end;
正如你看到的,我期運用線程。所以需要Synchronize
。
您從異常中獲得該消息,對不對?調試器會中斷你的程序並準確告訴你異常來自哪裏,不是嗎?所以調試它。至少,在你的問題中包括例外的來源。 –
這是一個完全拋開的問題,但'Dec'是一個函數(單位'System'),用於遞減一個整數。在這裏你聲明一個字符串變量'Dec',它隱藏了這個函數。這是不好的做法,特別是對於像'dec'這樣的通用函數 - 您應該爲變量使用唯一的名稱。 –
@J ...修正了這個問題。謝謝 – Sky