나는 직접 그리기를 사용하는 기존 코드 조각으로 작업하며 다소 당황 스럽습니다. 얼마전에 필자는 시스템을 업데이트했고 새로운 상황 (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;
}
아이디어가 있으십니까? 왜이 솔루션이 아닌 하나의 솔루션에서 작동합니까? 오우 링커 나는 너를 혐오한다.
동일한 파일을 사용하는 다른 프로젝트는 프로젝트 입력에 연결되어 있지 않아 제대로 작동합니다. #pragma comment를 통해 링크되지 않습니다. – Deka
@Deka : 링커 입력에 추가 했습니까? 그렇지 않다면 시도하십시오. – ildjarn
나는 그것을 링크하고 작동하지만 왜 다른 프로젝트에서 링크하지 않아도 되었습니까?! – Deka