1. 巧妇首先要找米,否则无法做饭。由于DirectX9在2006以后就没有DirectShow模块了。因此第一步要下载安装DirectX 9.0 SDK和 DirectX 9.0 SDK Update (February 2005) Extras。
BaseClasses就在目录D:\Download\dxsdk2005\Extras\DirectShow\Samples\C++\DirectShow\BaseClasses下。
下载路径如下:
http://119.84.110.127/dxsdk_feb2005_extras.exe?fid=KRNc615mzAWdRTdsGRJ1Ep5A6s8IFzoCAAAAAOV-TGMkJ2MG*- 4USJfYXUi0E5I&mid=666&threshold=150&tid=CFF69D745B766E6497694F3FF6274768&srcid=119&verno=1
或
http://download.microsoft.com/download/d/9/1/d91c44b9-fbac-4e8e-bee1-4a75777923ec/dxsdk_feb2005_extras.exe
2. 用vs2010打开工程,并转化。
3. 编译,会报错,如下。
c:/program files/microsoft sdks/windows/v7.0a/include/objidl.h(11280): error C2061: 语法错误: 标识符“__RPC__out_xcount_part”
c:/program files/microsoft sdks/windows/v7.0a/include/objidl.h(11281): error C2059: 语法错误:“)”
1>c:\program files\microsoft sdks\windows\v7.0a\include\objidl.h(11303): error C2059: 语法错误:“<L_TYPE_raw>”
c:\program files\microsoft sdks\windows\v7.0a\include\objidl.h(11303): error C2238: 意外的标记位于“;”之前
由于在2010下DShow相关库文件在Microsoft sdks中,因此要修改的文件也在该目录中找。
在C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\objidl.h文件下的
#ifndef __AsyncIPipeByte_INTERFACE_DEFINED__
#define __AsyncIPipeByte_INTERFACE_DEFINED__
下面直接加上
#define __RPC__out_xcount_part(size, length)
#define __RPC__in_xcount(size)
#define __RPC__in_xcount_full(size)
#define __RPC__in_range(min, max)
#define __RPC__inout_xcount(size)
才能起作用
网上还有种说法是
在DX目录下的Rpcsal.h中添加如下预编译指令:
#define __RPC__out_xcount_part(size, length)
#define __RPC__in_xcount(size)
#define __RPC__in_xcount_full(size)
#define __RPC__in_range(min, max)
#define __RPC__inout_xcount(size)