반응형
[펌] 미니 ATL 프로그래밍
간단예제 만들기
출처 : http://blog.daum.net/aswip/7588370
[Q&A] CoInitialize, CoUninitialize, Release 관련 Scope질문답변
| XML 데이타처리와 관련하여 | VC++ 일반 | 2006-07-17 오후 9:05:47 |
| // 기동 및 처리과정 ::CoInitialize(NULL); CreateDOMXML(); CString strPath; // 모듈의 패스를 취득한다.. CGLPFileDirUtility MessageFileDir; strPath = MessageFileDir.GetExeModuleDirectory(); strPath += GLP_MESSAGEFILENAME; LoadXMLFile(strPath); // 종료시 ::CoUninitialize(); * 위에서 기동및 처리과정에서는 전혀 문제가 없습니다. 그리고 제가 원하는 XML 데이타도 잘 가져 오는데요 종료시 과정인 ::CoUninitialize() 함수만 실행했다하면 VC98/include/COMIP.H의 아래부분에서 // The Interface. // Interface* m_pInterface; // Releases only if the interface is not null. // The interface is not set to NULL. // void _Release() throw() { if (m_pInterface != NULL) { m_pInterface->Release(); <---------------- 여기요 } } 에서 에러라구 팍 올라옵니다. 좀 누가 아시면 좀 알려주세요 죽겠습니다. |
| [답변]... | 2006-07-17 오후 11:00:01 |
| XML 이면 IXML???Ptr 류의 스마트 포인터를 쓰셨을 것 같군요. 맞죠? 그걸 혹시 멤버 변수로 하셨습니까? 그런 경우에 문제가 될 수 있는데 CoUninitialize 를 하고 나면 이 이후에 COM API 호출하느건 다 에러 떨어집니다. 그런데 아마 이걸 멤버 함수 리턴하기 전에 하셨을 것 같은데 맞죠? 그럼 나중에 클래스 인스턴스가 파괴되면서 내부적으로 Release 를 다 부르는데 이미 CoUninitialize 가 호출된 후이기 때문에 그렇게 되는겁니다. 뭐 꼭 이런 상황이 아니더라도 비슷하게 CoInitilize 와 CoUnintialize 사이의 스코프보다 스마트 포인터 객체의 스코프가 더 크면 저런 문제가 생깁니다. 변수 스코프를 다시 확인해보세요 |
|||
|
|
|||
반응형
'Tech > 프로그래밍' 카테고리의 다른 글
| [Scrap] Extended use of CStatic Class (0) | 2009.05.27 |
|---|---|
| CStdioFile: GetPosition, Seek 질문답변 (0) | 2009.05.22 |
| COM Versioning관련해서 알아볼 것 (0) | 2009.02.18 |
| Debugging Tip, Windows dll의 symbol정보 표시 (0) | 2009.02.18 |
| Debugging Tools and Symbols: Getting Started (0) | 2009.02.17 |
