包含dshow.h会导致定义错误

时间:2010-03-31 17:07:29

标签: c++ directshow

我正在尝试使用DirectShow进行音频播放。我有一个头文件,顶部是:

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

然后继续定义一个类。 当包括dshow.h时,我得到以下complilation错误:

  

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 个答案:

答案 0 :(得分:1)

通过更改#include定义的顺序来解决此问题。我将上面代码定义的头文件移动到顶部,现在可以正常工作了。一定是与另一个文件中的某些代码冲突,可能是一些与directSound相关的东西。

答案 1 :(得分:1)

我几次遇到过这个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