Platform SDK 또는 WTL  라이브러리를 설치하고 난뒤
현재 사용중인 프로그램 안에서 ATL을 사용할때 간혹 발생할 수 있는 오류이다.

이 오류의 원인은 InlinesEqualGUID 라는 인라인 함수에 의해 발생된다.
이 문제의 원인 Platform SDK 안의 헤더 파일인 Guiddef.h 와 ATL에 자체적으로 가진 AtlBase.h 안에서 선언과
함께 namespace가 틀리기 때문에 발생한다.
즉 Guiddef.h 안의 함수와 ATL안의 AtlBase.h안의 함수가 이름은 똑같은데 헷갈리게 이름은 똑같은 문제인것이다.
그래서 만약 using namespace ATL; 이라고 선언하면 자폭하게 되는 것이다.

이를 해결하는 방법은 InlienEqualGUID를 호출 할때 앞부분에 " ::ATL:: "을 붙이는 것이다.
InlineIsEqualGUID(xxxxx, xxxxx) 라고 되어 있으면 ::ATL::InlineIsEqualGUID(xxxxx, xxxxx) 라고 수정하면 된다.


                       
728x90

+ Recent posts