Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.119.192] |
|
Сообщ.
#1
,
|
|
|
Добрый вечер!
При попытке скомпилировать 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) // 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); }; |
Сообщ.
#2
,
|
|
|
Цитата Lun2 @ Непонятно для меня - почему ошибка случается в примере из MSDN, а самое главное - каким образом ее исправить ??? Есть подозрение, что нужно сперва проверить, что используемая версия MSVC подходит для сборки этого примера. |
Сообщ.
#3
,
|
|
|
Цитата Majestio @ нужно...проверить, что используемая версия MSVC подходит для сборки этого примера. я не совсем понял Вашего ответа. В свойствах проекта версия C++ 14. Это Вы имели в виду, или имелась в виду версия именно компилятора, а не стандарта языка ? |
Сообщ.
#4
,
|
|
|
Про графику ничнго сказать не могу, но помню разбирался с WDK - там вроде не было совместимости сверху вниз. Т.е. для Win7 использовалась одна версия, для 8/10 - своя. Поэтому я рекомендую покопаться в документации и выяснить требования для сборки.
Добавлено И еще ... там проскакивает строка "Samples\Win7Samples", наверное речь идет о примерах под Windows 7, тогда С++14 тут явно завышенный стандарт С++. ИМХО. |
Сообщ.
#5
,
|
|
|
Я бы для начала убрал квалификацию CAggDirectDraw:: у деструктора. Это уж точно не по Стандарту. Ни по какому.
|
Сообщ.
#6
,
|
|
|
Всем спасибо!
Вопрос решен. |