XP + VS2010 + DirectShow9.0 SDK 环境配置 遇到的问题

streams.h和streams.lib

是放在 DirectShow SDK/Samples/C++/DirectShow/BaseClasses

编译下就可以了

问题麻烦就是 VS2010 编译不通:

编译时出现如下问题:

问题1:

c:\program files\microsoft\v6.0\include\winnt.h(236) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
c:\program files\microsoft\v6.0\include\winnt.h(236) : error C2146: syntax error : missing ';' before identifier 'Buffer'

问题起因分析:

打开winnt.h文件,发现问题就是在winnt.h头文件中无POINTER_64的定义造成的。搜索vc下的头文件,发现在basetsd.h头文件中有POINTER_64的定义,而在winnt.h头文件中也包含了该头文件。该问题是头文件搜索顺序引起的,由于DX SDK的头文件搜索顺序在Platform SDK之前。而在DX SDK中也有basetsd.h头文件,而该文件无POINTER_64的定义,因此编译通不过。


解决方案:

Solution1:

调整IDE中头文件目录路径顺序,将Platform SDK头文件目录放在DX SDK头文件目录前。

Solution 2. 
typedef void *PVOID; 
typedef void * POINTER_64 PVOID64; 
在它之前加下: 
#define POINTER_64 __ptr64 

Solution 3. 
typedef void *PVOID; 
typedef void * POINTER_64; 
typedef void * PVOID64;

//经本人测试,以上三种方法均有效。

 

问题2:

operator=(LONG);

报 "error C4430: 缺少类型说明符 - 假定为 int。

注意: C++ 不支持默认 int

的处理方法是:

改:

//static g_dwLastRefresh = 0;

static DWORD g_dwLastRefresh = 0; //lspmodify

问题3:

 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

./winutil.cpp(2104) : error C2065: 'Count' : undeclared identifier

请修改winutil.cpp:

 ctlutil.h

operator=(LONG);

改为

COARefTime& operator=(LONG);

 

for (Count = PalLoCount;INT(Count) < min(PalHiStart,iColours);Count++) {

改为

for (int Count = PalLoCount;INT(Count) < min(PalHiStart,iColours);Count++) {"

 

添加:

long iDone = 0; 
for (iDone = 0;iDone < nSamples || (m_nBatched != 0 && m_bSendAnyway);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值