开发DirectX9中DirectShow的配置问题

来源:互联网 发布:java三大框架介绍 编辑:程序博客网 时间:2024/04/28 10:06
 编译DX9的Sample中的DirectShow的库与工程时,可能会遇到下面的编译期问题:
  1. 1>d:/program files/microsoft visual studio 8/vc/platformsdk/include/winnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
  2. 1>d:/program files/microsoft visual studio 8/vc/platformsdk/include/winnt.h(222) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  3. 1>d:/program files/microsoft visual studio 8/vc/platformsdk/include/winnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer'
  4. 1>d:/program files/microsoft visual studio 8/vc/platformsdk/include/winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  5. 1>d:/program files/microsoft visual studio 8/vc/platformsdk/include/winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
其中最主要的原因是第一个问题,如果不想修改原码的话,解决方法有两个:
1.在VS2005关于VC的配置中把包含目录的顺序改一下,把对DX的目录放到Platform SDK目录前面(上面)
2.把DX的Include目录中的basetsd.h删掉。

原因如下:
PlatformSDK中本身就有对64位的支持,其定义位于winnt.h包含包的basetsd.h中
basetsd.h中有对 POINTER_64 的定义,遗憾的是DX的Include中也带了个basetsd.h,
而其中没有对POINTER_64的定义,在VC的配置中加入DX的Include目录后(加在PlatformSDK后面),编译时
编译器就会先包含DX的basestd.h,当然由于预编译的保护就不会再包含PlatformSDK的basestd.h,
因此winnt.h包含的
typedef void * POINTER_64 PVOID64;自然就找不到POINTER_64的定义。

至于4,5中的default-int是VC6下的C++编译习惯,VC8中编译器对STL的支持更加好了,换句话说更严格了。
具体原因可以参考《VC6到VC8的迁移》
原创粉丝点击