在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)這個版本比較穩定和常用。

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