Windows Embedded Compact 7 응용 어플리케이션 개발 설정을 위해 테스트 도중 다음과 같은 에러가 발생했다.

1>c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\atlmfc\include\atlbase.h(7362) : error C2668: 'ATL::InlineIsEqualGUID' : 오버로드된 함수에 대한 호출이 모호합니다.
1>        c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\atlmfc\include\atlosapice.h(1313): 'int ATL::InlineIsEqualGUID(const GUID &,const GUID &)'일 수 있습니다.
1>        C:\Program Files (x86)\Windows CE Tools\SDKs\TCC892x_W7_SDK\include\ARMv4I\guiddef.h(138): 또는 'int InlineIsEqualGUID(const GUID &,const GUID &)'[인수 종속성을 조회하여 발견)

 

원인:

  AtlBase.h에 using namepace ATL;이 선언되어있기 때문에 sdk와 충돌이 생기는 듯 하다. 

 

해결 방법:

  atlbase.h의 전역 네임스페이스 이름을 명시해준다.

::ATL::InlineIsEqualGUID()

 

예시:

if ((pEntry->pfnGetClassObject != NULL) && ::ATL::InlineIsEqualGUID(rclsid, *pEntry->pclsid))
{
	if (pEntry->pCF == NULL)
	{
		CComCritSecLock lock(_AtlComModule.m_csObjMap, false);
		hr = lock.Lock();
		if (FAILED(hr))
		{
			ATLTRACE(atlTraceCOM, 0, _T("ERROR : Unable to lock critical section in CComModule::GetClassObject\n"));
			ATLASSERT(0);
			break;
		}
		if (pEntry->pCF == NULL)
			hr = pEntry->pfnGetClassObject(pEntry->pfnCreateInstance, __uuidof(IUnknown), (LPVOID*)&pEntry->pCF);
	}
	if (pEntry->pCF != NULL)
		hr = pEntry->pCF->QueryInterface(riid, ppv);
	break;
}

 

 

 

참고 링크:

BUG: A "C2668: 'InlineIsEqualGUID'" error occurs when you try to build a default ATL project that contains a COM object in Visual C++

 

 

 

 

Posted by Kugi
,