На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Не получается скомпилировать пример DirectShow из SDK
    Добрый вечер!
    При попытке скомпилировать DLL демонстрационного фильтра DUMP я получаю ошибку в строке 54 - см. код далее.
    Ошибки перечислены далее.

    Насколько я понимаю, проблема проистекает из того, что класс CAggDirectDraw наследуется из 2-х других классов.

    Непонятно для меня - почему ошибка случается в примере из MSDN, а самое главное - каким образом ее исправить ???

    Перечень ошибок:

    Скрытый текст
    Серьезность Код Описание Проект Файл Строка Состояние подавления
    Ошибка C3244 CAggDirectDraw::~CAggDirectDraw(void): этот метод был создан "<Нет данных>", но не "IDirectDraw" Dump C:\Users\Kras\source\repos\Windows-classic-samples\Samples\Win7Samples\multimedia\directshow\BaseClasse s\videoctl.h 54
    Ошибка C2385 неоднозначный уровень доступа "{dtor}" Dump C:\Users\Kras\source\repos\Windows-classic-samples\Samples\Win7Samples\multimedia\directshow\BaseClasse s\videoctl.h 54
    Ошибка C3254 CAggDirectDraw: класс содержит явное переопределение "{dtor}", но не является производным от интерфейса, который содержит объявление функции Dump C:\Users\Kras\source\repos\Windows-classic-samples\Samples\Win7Samples\multimedia\directshow\BaseClasse s\videoctl.h 54
    Ошибка C2440 инициализация: невозможно преобразовать "const wchar_t [6]" в "LPWSTR" Dump C:\Users\Kras\source\repos\Windows-classic-samples\Samples\Win7Samples\multimedia\directshow\filters\du mp\dump.cpp 92


    А вот код с ошибкой, кстати это файл videoctl.h из SDK (папка BASECLASSES)


    ExpandedWrap disabled
      // Class that aggregates an IDirectDraw interface
       
      class CAggDirectDraw : public IDirectDraw, public CUnknown
      {
      protected:
       
          LPDIRECTDRAW m_pDirectDraw;
       
      public:
       
          DECLARE_IUNKNOWN
          STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,__deref_out void **ppv);
       
          // Constructor and destructor
       
          CAggDirectDraw(__in_opt LPCTSTR pName,__inout_opt LPUNKNOWN pUnk) :
              CUnknown(pName,pUnk),
              m_pDirectDraw(NULL) { };
       
          virtual CAggDirectDraw::~CAggDirectDraw() { };  // !!!!!!! СТРОКА 54 - ЗДЕСЬ ОШИБКА
       
          // Set the object we should be aggregating
          void SetDirectDraw(__inout LPDIRECTDRAW pDirectDraw) {
              m_pDirectDraw = pDirectDraw;
          }
       
          // IDirectDraw methods
       
          STDMETHODIMP Compact();
          STDMETHODIMP CreateClipper(DWORD dwFlags,__deref_out LPDIRECTDRAWCLIPPER *lplpDDClipper,__inout_opt IUnknown *pUnkOuter);
          STDMETHODIMP CreatePalette(DWORD dwFlags,__in LPPALETTEENTRY lpColorTable,__deref_out LPDIRECTDRAWPALETTE *lplpDDPalette,__inout_opt IUnknown *pUnkOuter);
          STDMETHODIMP CreateSurface(__in LPDDSURFACEDESC lpDDSurfaceDesc,__deref_out LPDIRECTDRAWSURFACE *lplpDDSurface,__inout_opt IUnknown *pUnkOuter);
          STDMETHODIMP DuplicateSurface(__in LPDIRECTDRAWSURFACE lpDDSurface,__deref_out LPDIRECTDRAWSURFACE *lplpDupDDSurface);
          STDMETHODIMP EnumDisplayModes(DWORD dwSurfaceDescCount,__in LPDDSURFACEDESC lplpDDSurfaceDescList,__in LPVOID lpContext,__in LPDDENUMMODESCALLBACK lpEnumCallback);
          STDMETHODIMP EnumSurfaces(DWORD dwFlags,__in LPDDSURFACEDESC lpDDSD,__in LPVOID lpContext,__in LPDDENUMSURFACESCALLBACK lpEnumCallback);
          STDMETHODIMP FlipToGDISurface();
          STDMETHODIMP GetCaps(__out LPDDCAPS lpDDDriverCaps,__out LPDDCAPS lpDDHELCaps);
          STDMETHODIMP GetDisplayMode(__out LPDDSURFACEDESC lpDDSurfaceDesc);
          STDMETHODIMP GetFourCCCodes(__inout LPDWORD lpNumCodes,__out_ecount(*lpNumCodes) LPDWORD lpCodes);
          STDMETHODIMP GetGDISurface(__deref_out LPDIRECTDRAWSURFACE *lplpGDIDDSurface);
          STDMETHODIMP GetMonitorFrequency(__out LPDWORD lpdwFrequency);
          STDMETHODIMP GetScanLine(__out LPDWORD lpdwScanLine);
          STDMETHODIMP GetVerticalBlankStatus(__out LPBOOL lpblsInVB);
          STDMETHODIMP Initialize(__in GUID *lpGUID);
          STDMETHODIMP RestoreDisplayMode();
          STDMETHODIMP SetCooperativeLevel(HWND hWnd,DWORD dwFlags);
          STDMETHODIMP SetDisplayMode(DWORD dwWidth,DWORD dwHeight,DWORD dwBpp);
          STDMETHODIMP WaitForVerticalBlank(DWORD dwFlags,HANDLE hEvent);
      };
      Цитата Lun2 @
      Непонятно для меня - почему ошибка случается в примере из MSDN, а самое главное - каким образом ее исправить ???

      Есть подозрение, что нужно сперва проверить, что используемая версия MSVC подходит для сборки этого примера.
        Цитата Majestio @

        нужно...проверить, что используемая версия MSVC подходит для сборки этого примера.

        я не совсем понял Вашего ответа.
        В свойствах проекта версия C++ 14.

        Это Вы имели в виду, или имелась в виду версия именно компилятора, а не стандарта языка ?
          Про графику ничнго сказать не могу, но помню разбирался с WDK - там вроде не было совместимости сверху вниз. Т.е. для Win7 использовалась одна версия, для 8/10 - своя. Поэтому я рекомендую покопаться в документации и выяснить требования для сборки.

          Добавлено
          И еще ... там проскакивает строка "Samples\Win7Samples", наверное речь идет о примерах под Windows 7, тогда С++14 тут явно завышенный стандарт С++. ИМХО.
            Я бы для начала убрал квалификацию CAggDirectDraw:: у деструктора. Это уж точно не по Стандарту. Ни по какому.
              Всем спасибо!
              Вопрос решен.
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0950 ]   [ 15 queries used ]   [ Generated: 19.05.24, 00:40 GMT ]