在Windows7和Visual Studio 2010中编译DirectShow例程GrabBitmaps的问题

一开始提示的编译错误是:

fatal error C1083: 无法打开包括文件:“dxtrans.h”: No such file or directory

看了一下是在qedit.h中引用了这个头文件,翻遍了DirectX SDK也没有找到dxtrans.h这个头文件,上网查了一下是在DirectShow的变迁过程中,新版本中已经去掉了这个头文件,难道一定要安装旧版的DirectX SDK吗?可以用如下的折中解决方案:

在#include <qedit.h>这一句的前面添加如下代码:

#pragma include_alias( "dxtrans.h", "qedit.h" )
#define __IDxtCompositor_INTERFACE_DEFINED__
#define __IDxtAlphaSetter_INTERFACE_DEFINED__
#define __IDxtJpeg_INTERFACE_DEFINED__
#define __IDxtKey_INTERFACE_DEFINED__

此时再编译可能会出现如下链接错误,

1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_RGB24
1>strmbasd.lib(amvideo.obj) : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_RGB24
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _MEDIATYPE_Video
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _CLSID_FilterGraph
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _CLSID_AsyncReader
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _CLSID_SampleGrabber
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _IID_ISampleGrabberCB
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _IID_IBaseFilter
1>strmbasd.lib(wxdebug.obj) : error LNK2019: 无法解析的外部符号 _IID_IBaseFilter,该符号在函数 "void __stdcall DisplayType(char *,struct _AMMediaType const *)" (?DisplayType@@YGXPADPBU_AMMediaType@@@Z) 中被引用
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _IID_IFileSourceFilter
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _IID_IMediaSeeking
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _IID_IVideoWindow
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _IID_IMediaControl
1>GrabBitmaps.obj : error LNK2001: 无法解析的外部符号 _IID_IMediaEvent
1>strmbasd.lib(mtype.obj) : error LNK2001: 无法解析的外部符号 _FORMAT_WaveFormatEx
1>strmbasd.lib(mtype.obj) : error LNK2001: 无法解析的外部符号 _MEDIATYPE_Audio
1>strmbasd.lib(wxdebug.obj) : error LNK2001: 无法解析的外部符号 _MEDIATYPE_Audio
1>strmbasd.lib(wxdebug.obj) : error LNK2001: 无法解析的外部符号 _IID_IPin
1>strmbasd.lib(wxdebug.obj) : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_MPEG1Packet
1>strmbasd.lib(wxdebug.obj) : error LNK2001: 无法解析的外部符号 _FORMAT_VideoInfo
1>strmbasd.lib(amvideo.obj) : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_Overlay
1>strmbasd.lib(amvideo.obj) : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_ARGB32
1>strmbasd.lib(amvideo.obj) : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_RGB32
1>strmbasd.lib(amvideo.obj) : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_RGB555
1>strmbasd.lib(amvideo.obj) : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_RGB565
1>strmbasd.lib(amvideo.obj) : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_RGB8
1>strmbasd.lib(amvideo.obj) : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_RGB4
1>strmbasd.lib(amvideo.obj) : error LNK2001: 无法解析的外部符号 _MEDIASUBTYPE_RGB1


这是因为缺少了一个链接库,在链接附加项里面添加strmiids.lib即可。


另外,好像DirectX SDK (Aug 2007)这个版本比较稳定和常用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章