转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=321

用MinGW编译DShow的东西,经常遇到没找到IBaseFilter的问题。本质上是MinGW的w32api并没有提供完整的DShow头文件所致。经过一番折腾,得到了下面的解决方案:
1. 从http://sourceforge.net/projects/mingw-w64/下载mingw-w64-headers,我这里用的是mingw-w64-headers-20100717.tar.xz
2. 把mingw-w64-headersinclude目录下的strmif.h、rpcndr.h、uuids.h、ksuuids.h、control.h拷贝到MinGWinclude,覆盖原有文件。
3. 打开strmif.h,删掉所有”__MINGW_EXTENSION”。
4. 打开rpcndr.h,删掉所有”__MINGW_EXTENSION”,并在第81行”typedef int ssize_t;”的前后分别加上”#ifdef _SSIZE_T_”和”#endif”。
5. 打开vmr9.h,查找”MixerPref9_RenderTargetMask = 0x000FF000″一行,在后面加上”,”;查找”wchar_t szDescription[512]”,在后面加上”;”。(这个最莫名其妙了,原作者居然都没加)
6. 打开Windows SDK的wmr9.h,把接口都添到MinGW的vmr9.h中。
至此,DShow相关的东西就可以用MinGW编译了,不再会报缺少接口。

新增和修改过的文件可以在这里下载:
DShow patch for MinGW