一開始提示的編譯錯誤是:
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)這個版本比較穩定和常用。