一开始提示的编译错误是:
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)这个版本比较稳定和常用。