2013-08-17 3 views
1
내가 블로그 http://blogs.msdn.com/b/ieinternals/archive/2012/03/23/understanding-ie10-enhanced-protected-mode-network-security-addons-cookies-metro-desktop.aspx

오류 LNK2001 : 확인되지 않은 외부 기호 CATID_AppContainerCompatible

에 따라 APPcontainer.Now와 BHO를 등록하려고

는, 나는 DLLRegister

DEFINE_GUID(CATID_AppContainerCompatible, 0x59fb2056,0xd625,0x48d0,0xa9,0x44,0x1a,0x85,0xb5,0xab,0x26,0x40);  


STDAPI DllRegisterServer(void) 
{ 
    // let ATL handle this 
    HRESULT hr = _AtlModule.DllRegisterServer(); 

    ICatRegister* pcr = NULL ; 

     hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); 
     if (FAILED(hr)) 
      return hr; 
     if (SUCCEEDED(hr)) 
     { 
      // Register this category as being "implemented" by 
      // the class. 
      CATID rgcatid[1] ; 
      rgcatid[0] = CATID_AppContainerCompatible; 
      hr = pcr->RegisterClassImplCategories(CLSID_ABC, 1, rgcatid); 
     } 

I 시도와 동일한 CPP 파일에 다음과 같은 정의

unresolved external symbol CATID_AppContainerCompatible 

이 오는 이유는 확실하지 : 나는 오류가 다음 무엇입니까이 코드를 컴파일합니다. CATID_AppContainerCompatible 정의를 마우스 오른쪽 버튼으로 클릭하여 탐색 할 수 있습니다. 어떤 suggesitons ??

나는이 문제를 해결했다. DEFINE_GUID가 GUID를 extern으로 선언했기 때문에 const GUID CATID_AppContainerCompatible ;을 내 파일에 넣어야합니다. 그 문을 컴파일 한 후.

+0

의 #include Initguid.h를 대신 guiddef 등의. h. 그것은 INITGUID 매크로가 정의되어 있고 링크 할 수있는 extern 정의를 갖도록합니다. –

답변

4

DEFINE_GUID 동작은 INITGUID 정의의 존재 여부에 따라 달라집니다. 이것은 매우 빈번한 문제이므로 자세한 내용을 다시 한 번 반복하는 것은 이치에 맞지 않습니다. 자세한 내용은 How to avoid error "LNK2001 unresolved external" by using DEFINE_GUID입니다.

는 예를 들어, 당신이 __declspec(uuid(...)) 지정자를 사용할 수있는이 함정에 빠지지 않도록 자동으로 컴파일러 정렬 GUID를 내보내려면 :

이에
class __declspec(uuid("{26AFA816-359E-4094-90A8-BA73DE0035FA}")) 
    AppContainerCompatible; 
// ... 
rgcatid[0] = __uuidof(AppContainerCompatible); //CATID_AppContainerCompatible; 

더 : Referencing GUIDs

관련 문제