이 코드를 사용하여 사이트의 RSS를 가져옵니다. 이 코드는 내 컴퓨터와 다른 많은 컴퓨터에서 잘 작동합니다. 그러나 일부 컴퓨터 (Windows XP 또는 7)에서이 오류가 발생합니다. MSXML이 설치되지 않았습니다.XML : MSXML이 설치되지 않았습니다.
이 문제를 어떻게 해결할 수 있습니까? 뭐가 잘못 되었 니? 당신은 내가 스레드를 useing있어시피
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