2011-05-11 113 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

您是否将dxguid.lib添加到您的项目的linker inputs

+0

我使用相同文件的其他项目没有链接在项目输入,它工作正常。它也没有通过#pragma注释链接。 – Deka 2011-05-11 15:33:59

+0

@Deka:那么,您是否将它添加到链接器输入中?如果没有,尝试一下。 – ildjarn 2011-05-11 15:45:22

+0

我已经链接它,它的工作原理,但为什么我没有在其他项目中链接它? – Deka 2011-05-11 19:12:00

0

确保在项目中添加了Dxguid.lib。

+0

嗯...不会自动链接到附加的Lib目录 - > [My_DirectX_SDK_Location \ Lib \ x86]? – Deka 2011-05-11 15:27:19

+0

@Deka:无 - 告诉链接器.lib文件的存在位置与告诉它实际链接给定的.lib文件不同。 – ildjarn 2011-05-11 15:44:55

相关问题