본문 바로가기

프로그래밍/버그 & 에러 리포팅

atlcom.h에서 ClassesAllowedInStream rgclsidAllowed; 에러가 나는 경우 (updated)

이전  포스팅 중에 atl 관련 보안업데이트로 인해 에러가 나는 경우에 대해서 Dynamic Link to ATL로 변경하여 처리한 글이 있다. (여기)

1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(431) : error C2146: syntax error : missing ';' before identifier 'rgclsidAllowed'
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(431) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(431) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(6053) : error C2039: 'rgclsidAllowed' : is not a member of 'ATL::ATL_PROPMAP_ENTRY'
1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(422) : see declaration of 'ATL::ATL_PROPMAP_ENTRY'
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(6053) : error C2660: 'ATL::CComVariant::ReadFromStream' : function does not take 4 arguments

이번엔 static으로 atl을 붙여야 하는 작업이 필요해서 관련 자료를 찾아 보았다.
ATL 보안업데이트 (MS09-035) 에 대해서는 좀 더 자세한 자료를 찾을 수 있다.

vs2008 sp1 업데이트 후 윈도우즈 보안업데이트로 위와 같이 에러가 발생하고 ATL 을 Static으로 작업하려고 하는데 에러가 나는 경우는 업데이트가 정상적으로 이뤄지지 않았고 내부적인 ATL 헤더가 교체되지 않았기 때문이다.

이는 Visual Studio 2008 서비스팩1 ATL 보안업데이트 를 통해서 해결이 가능하다.