2011-05-11 2 views
2

나는 직접 그리기를 사용하는 기존 코드 조각으로 작업하며 다소 당황 스럽습니다. 얼마전에 필자는 시스템을 업데이트했고 새로운 상황 (ddraw.dll로드)에 적응해야했으며 모든 것이 잘 동작했습니다. 오늘 내가 변경 한 클래스 (파일)를 사용하는 또 다른 기존 솔루션을 살펴 보았지만 위의 링크 오류로 인해 막혔습니다. 프로젝트 속성을 확인하고 비교해 보았습니다.오류 LNK2001 : 확인할 수없는 외부 기호 _IID_IDirectDraw2

이 코드는 directX 초기화 코드이며 "번잡 한"코드는 굵게 표시됩니다.

typedef int (__stdcall *DirectDrawCreateFunc)(GUID FAR* a ,LPDIRECTDRAW FAR* b, IUnknown FAR* c); 

    /* init_directx: 
    * Low-level DirectDraw initialization routine. 
    */ 
    int CDCUtils::init_directx(HWND allegro_wnd) 
    { 
     LPDIRECTDRAW directdraw1; 
     HRESULT hr; 
     LPVOID temp; 
     HINSTANCE ddraw = LoadLibrary("%WINDIR%\system32\ddraw.dll"); 
     if(ddraw== NULL) 
     { 
      return -1; 
     } 
     _ddrawLib =ddraw; 
    DirectDrawCreateFunc ddFunc = (DirectDrawCreateFunc)GetProcAddress(ddraw,"DirectDrawCreate"); 
    if(ddFunc) 
    { 
    /* first we have to set up the DirectDraw1 interface... */ 
     hr = ddFunc(NULL, &directdraw1, NULL); 
     if (FAILED(hr)) 
      return -1; 
    } 

     ///* first we have to set up the DirectDraw1 interface... */ 
     //hr = DirectDrawCreate(NULL, &directdraw1, NULL); 
     //if (FAILED(hr)) 
     // return -1; 

     //...then query the DirectDraw2 interface 
     //This is the only place where IID_IDirectDraw2 is mentioned in entire solution 
     hr=directdraw1->QueryInterface(IID_IDirectDraw2, &temp); 
     if (FAILED(hr)) 
      return -1; 

     _directdraw = (LPDIRECTDRAW2)temp; 
     directdraw1->Release(); 

     /* set the default cooperation level */ 
     hr = IDirectDraw2_SetCooperativeLevel(_directdraw, allegro_wnd, DDSCL_NORMAL); 
     if (FAILED(hr)) 
      return -1; 

     /* get capabilities */ 
     _ddcaps.dwSize = sizeof(_ddcaps); 
     hr = IDirectDraw2_GetCaps(_directdraw, &_ddcaps, NULL); 
     if (FAILED(hr)) { 
      TRACE("Can't get driver caps\n"); 
      return -1; 
     } 

     _dxHwnd=allegro_wnd; 
     return 0; 
    } 

아이디어가 있으십니까? 왜이 솔루션이 아닌 하나의 솔루션에서 작동합니까? 오우 링커 나는 너를 혐오한다.

답변

4

프로젝트의 linker inputsdxguid.lib을 추가 했습니까?

+0

동일한 파일을 사용하는 다른 프로젝트는 프로젝트 입력에 연결되어 있지 않아 제대로 작동합니다. #pragma comment를 통해 링크되지 않습니다. – Deka

+0

@Deka : 링커 입력에 추가 했습니까? 그렇지 않다면 시도하십시오. – ildjarn

+0

나는 그것을 링크하고 작동하지만 왜 다른 프로젝트에서 링크하지 않아도 되었습니까?! – Deka

0

프로젝트에 Dxguid.lib를 추가했는지 확인하십시오.

+0

음 ... 추가 Lib 디렉토리 -> [My_DirectX_SDK_Location \ Lib \ x86]과 자동으로 링크되어 있지 않습니까? – Deka

+0

@Deka : 아니요 - 일부 .lib 파일이있는 링커에게 실제로 주어진 .lib 파일을 연결하도록 지시하는 것과는 다릅니다. – ildjarn

관련 문제