3

私は直接描画を使用するレガシーコードを使用していますが、かなり恥ずかしい状況にあります。少し前にシステムを更新し、新しい状況(ddraw.dllのロード)に適応する必要があり、すべてが正常に機能しました。今日、私は変更したクラス(ファイル)を使用する別のレガシーソリューションを検討しましたが、上記のリンクエラーで立ち往生しています。プロジェクトのプロパティを確認して比較しましたが、それらはうまく継ぎ目があります。

これは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;
    } 

何か案は?なぜこれは1つのソリューションで機能し、このソリューションでは機能しないのですか?ああリンカー私はあなたを嫌います。

4

2 に答える 2

7

dxguid.libプロジェクトのリンカー入力に追加しましたか?

于 2011-05-11T15:08:20.200 に答える
0

プロジェクトにDxguid.libを追加してください。

于 2011-05-11T15:09:04.970 に答える