Включение dshow.h приводит к ошибкам определения - PullRequest
1 голос
/ 31 марта 2010

Я пытаюсь сделать несколько вещей, используя DirectShow для воспроизведения звука. У меня есть файл заголовка, вверху это:

#pragma once
#include <dshow.h>
#pragma comment(lib, "strmiids.lib")

и затем он продолжает определять класс. При включении dshow.h я получаю следующие ошибки компиляции:

C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0 \ include \ ddraw.h (703): ошибка C2011: '_DDPIXELFORMAT': переопределение типа 'struct'

c: \ program files \ microsoft sdks \ windows \ v7.0 \ include \ ksmedia.h (5749): см. Объявление '_DDPIXELFORMAT'

C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0 \ include \ ddraw.h (2249): ошибка C2079: '_DDSURFACEDESC :: ddpfPixelFormat' использует неопределенную структуру '_DDPIXELFORMAT'

C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0 \ include \ ddraw.h (2292): ошибка C2079: '_DDSURFACEDESC2 :: ddpfPixelFormat' использует неопределенную структуру '_DDPIXELFORMAT'

C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0 \ include \ strmif.h (12918): ошибка C2011: переопределение типа 'tagTIMECODE_SAMPLE': 'struct'

c: \ program files \ microsoft sdks \ windows \ v7.0 \ include \ ksmedia.h (5274): см. Объявление «tagTIMECODE_SAMPLE»

Я не могу понять, что вызвало бы эти ошибки в этом случае. Заголовочный файл является частью проекта MFC, если это имеет какое-либо значение. Любой совет?

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Я сталкивался с этой ошибкой интеграции SDK пару раз, совсем недавно при интеграции консольного приложения win32 с библиотекой, использующей Windows CoreAudio, и ошибка произошла с stdafx.h:

// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//

#pragma once

#ifndef _WIN32_WINNT        // Allow use of features specific to Windows XP or later.                   
#define _WIN32_WINNT 0x0502 // Change this to the appropriate value to target other versions of Windows.
#endif                      

#include <stdio.h>
#include <tchar.h>



// TODO: reference additional headers your program requires here
#include <afx.h>
#include <afxwin.h>

Затем, чтобы устранить ошибку, я добавил следующее ниже текущего:

#include <winioctl.h>
#if (MSC_VER < 1400)
#include <strmif.h>
#endif

Надеюсь, это поможет кому-то в будущем столкнуться с этой проблемой. EB

1 голос
/ 01 апреля 2010

Исправлено это путем изменения порядка определений #include. Я переместил заголовочный файл, в котором был определен код выше, и теперь он работает нормально. Должно быть, столкновение с каким-то кодом в другом файле, возможно, с некоторыми материалами, связанными с DirectSound.

...