Q&A

  • [질문] 스레드 내에서 TXMLDocument ..
안녕하세요

제가 스레드 내에서 아래와 같이 코딩을 했습니다.


XMLDocument1 := TXMLDocument.Create(Application);
XMLDocument1.XML.Clear;

XMLDocument1.LoadFromFile('C:\App.xml');

XMLDocument1.Active := True;

위 내용에서 디버깅 해 보면 LoadFromFile 이 부분에서 더 이상 진행이 되질 않습니다.

스레드 내에선 위와 같이 하면 안되는 건지...TStringList로 파일을 불러 오면 잘 불러 와 지던데..
TXMLDocument 문제인지...델파이를 공부하면서 작업을 할려고 하니 쉽지가 않습니다 ㅠㅠ

가르침 주시면 정말 고맙겠습니다.~
4  COMMENTS
  • Profile
    강민주 2010.08.27 19:42
    CoInitialize(nil);
    try
    ///XMLDocument1.LoadFromFile('C:\App.xml');
    //호출
    except
    end;
    CoUninitialize;

    이렇게 한번 해보세요 ^^
  • Profile
    2root 2010.08.27 23:42
    아~~ 고맙습니다~!
    코드에 추가를 하니 실행이 됩니다!!

    그런데 한가지 이해가 잘 안되는 부분이 있습니다.

    제가 동일한 코드를 동일한 프로젝트에서 폼하나만 form1 의 걍 버튼 하나 두고 그 이벤트 안에다가
    XMLDocument1 := TXMLDocument.Create(Application);
    XMLDocument1.XML.Clear;
    XMLDocument1.LoadFromFile('C:\App.xml');
    XMLDocument1.Active := True;

    이렇게 하면 잘 실행이 되는데 이 동일한 코드를 thread로 옮겼을 땐 안되다가 답변 주신 거 처럼
    CoInitialize 이 부분을 추가 하니 실행이 됩니다.

    어떤차이가 있는지 솔직히 잘 모르겠습니다..
  • Profile
    강민주 2010.08.28 00:18
    쓰레드에서 com객체를 사용하기위해선 CoInitialize로 초기화를 해줘야됩니다.

    아래 사이트 참고하세요. ^^

    http://blog.naver.com/baemantotoro?Redirect=Log&logNo=30035403553
  • Profile
    2root 2010.08.28 00:30
    아~ 알겠습니다~

    답변 주셔서 고맙습니다~~ ^^