DirectX 9 SDK安装后在vs2005里编译BaseClasses出错?

woshizhanhun 2008-10-22 12:34:13
1>------ 已启动生成: 项目: BaseClasses, 配置: Debug Unicode Win32 ------
1>正在编译...
1>dllentry.cpp
1>D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
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
1>D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer'
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>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>d:\DXSDK\Samples\C++\DirectShow\BaseClasses\ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\DXSDK\include\uuids.h : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
1>生成日志保存在“file://d:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug_Unicode\BuildLog.htm”
1>BaseClasses - 6 个错误,1 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
...全文
2399 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
williamsong997 2011-06-13
  • 打赏
  • 举报
回复
微软的东西也会这么乱七八糟!
luowin 2008-12-11
  • 打赏
  • 举报
回复
资料在哪里?贴出来大家一起分享呀!!!!
scklotz 2008-10-22
  • 打赏
  • 举报
回复
编的是32位还是64位?
woshizhanhun 2008-10-22
  • 打赏
  • 举报
回复
生成日志 生成 已启动: 项目: BaseClasses,配置: Debug Unicode|Win32
命令行 正在创建临时文件“d:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug_Unicode\RSP00000736441192.rsp”,其内容为
[
/Od /I "." /I "..\..\..\..\include" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_WIN32_DCOM" /D "DEBUG" /D "WINVER=0x400" /D "WIN32" /D "UNICODE" /D "_VC80_UPGRADE=0x0600" /D "_UNICODE" /Gm /EHsc /RTC1 /MTd /Yc"streams.h" /Fp".\Debug_Unicode/baseclasses.pch" /Fo".\Debug_Unicode/" /Fd".\Debug_Unicode/" /W3 /c /Zi /Gz /TP ".\dllentry.cpp"
]
正在创建命令行“cl.exe @"d:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug_Unicode\RSP00000736441192.rsp" /nologo /errorReport:prompt”
正在创建临时文件“d:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug_Unicode\RSP00000836441192.rsp”,其内容为
[
/Od /I "." /I "..\..\..\..\include" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_WIN32_DCOM" /D "DEBUG" /D "WINVER=0x400" /D "WIN32" /D "UNICODE" /D "_VC80_UPGRADE=0x0600" /D "_UNICODE" /Gm /EHsc /RTC1 /MTd /Yu"streams.h" /Fp".\Debug_Unicode/baseclasses.pch" /Fo".\Debug_Unicode/" /Fd".\Debug_Unicode/" /W3 /c /Zi /Gz /TP ".\wxutil.cpp"

".\wxlist.cpp"

".\wxdebug.cpp"

".\winutil.cpp"

".\winctrl.cpp"

".\vtrans.cpp"

".\videoctl.cpp"

".\transip.cpp"

".\transfrm.cpp"

".\sysclock.cpp"

".\strmctl.cpp"

".\source.cpp"

".\seekpt.cpp"

".\schedule.cpp"

".\renbase.cpp"

".\refclock.cpp"

".\pullpin.cpp"

".\pstream.cpp"

".\outputq.cpp"

".\mtype.cpp"

".\dllsetup.cpp"

".\ddmm.cpp"

".\ctlutil.cpp"

".\cprop.cpp"

".\combase.cpp"

".\amvideo.cpp"

".\amfilter.cpp"

".\amextra.cpp"
]
正在创建命令行“cl.exe @"d:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug_Unicode\RSP00000836441192.rsp" /nologo /errorReport:prompt”
太乙 2008-10-22
  • 打赏
  • 举报
回复
友情up,,看看日志文件~!
woshizhanhun 2008-10-22
  • 打赏
  • 举报
回复
先介绍系统环境:
XP Professional sp2
visual studio 2005 version 8.0.50727.42
DirectX 9.0(9.0b) SDK Update - (Summer 2003)


首先,就是编译baseclasses,什么是baseclasses?打开你的dx的sdk安装目录,例如:
D:\DX90SDK\Samples\C++\DirectShow\
这里就有一个叫baseclasses的工程,为安全起见,请先备份此工程。

1,双击baseclasses.sln打开,提示我们需要转换工程,按提示转换就是了,编译
提示错误:
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C4430: missing type specifier - int assumed. Note: C++ does not support

default-int
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer'
1>D:\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>D:\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>d:\DX90SDK\Samples\C++\DirectShow\BaseClasses\ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-

int

第一类问题的解决:错误发生在:operator=(LONG);函数定义中,这是因为在VC6中,如果没有显示的指定返回值类型,编译器将其视为默认整 形;但是vs2005不支持默认整

形,解决这个问题不能修改每个没有显示指示返回值类型的函数地方,可以用wd4430来解决;具体的在工程选项中的c+ +/Command Line中添加/wd4430即可。

2,在Tools->Options->Projects and solutions->vc++ directories->show directories for里选择include files
然后增加
D:\DX90SDK\Include
D:\DX90SDK\Samples\C++\DirectShow\BaseClasses
D:\DX90SDK\Samples\C++\Common
可能会问题依旧,调整一下include files的顺序吧,把他们都放在最后,例如我的环境:
$(VCInstallDir)include
$(VCInstallDir)atlmfc\include
$(VCInstallDir)PlatformSDK\include
$(FrameworkSDKDir)include
D:\DX90SDK\Include
D:\DX90SDK\Samples\C++\DirectShow\BaseClasses
D:\DX90SDK\Samples\C++\Common
然 后在project->BaseClasses properties->configuration->C/C++ -> General->Additional Include Directories里面的内容(.,..\..\..\..\include)删掉,重新编译

,PVOID64的错误消失,原因如下:
POINTER_64 是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(Microsoft Visual Studio 8\VC\PlatformSDK\Include\basetsd.h(23):#define

POINTER_64 __ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错,只需要改变include files的优先级即可。当然,也可以改写winnt.h

中的代码,在下面这两行:typedef void *PVOID;
typedef void *POINTER_64 PVOID64;
之前增加一行:
#define POINTER_64 __ptr64

3,到目前为止,还剩下:
BaseClasses\ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
这个错误,解决方法如下:
打开project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430选项。
4, 接着编译,提示error C2065: 'Count' : undeclared identifier等等错误,这个是微软的历史遗留问题了,C++标准语法的问题,因为在之前在for循环内定义的变量可

以在for之外的地方使用,即 在第一个for里for(int i,...),以后的for再使用i不必再声明,解决方法也很简单,打开project->BaseClasses properties->configuration-

>C/C++->Language->Force Comformance in For Loop Scrope设置为No即可。当然,也可以手动改代码,增加一个声明就是了。

经过上面几个步骤,应该是可以顺利编译了,对于其它版本的工程,照样设置就可以了,总共编译出下面4个文件备用:
BaseClasses\Debug\strmbasd.lib
BaseClasses\Debug_Unicode\strmbasd.lib
BaseClasses\Release\STRMBASE.lib
BaseClasses\Release_UnicodeSTRMBASE.lib

在lib里面加入

commctrl.lib
coredll.lib
strmiids.lib
strmbase.lib
uuid.lib
ole32.lib
commdlg.lib

你或许需要在Tools->Options->Projects and solutions->vc++ directories->show directories for->library files里把它们加进去。
赶快编译DX90SDK\Samples\C++\DirectShow\Players\PlayDMO工程试试看吧。


找了个资料,解决了!
scklotz 2008-10-22
  • 打赏
  • 举报
回复
32位的代码 怎么会激活 winnt.h 中的 PVOID64

看看stdafx中是否启用有目标平台的定义宏?
woshizhanhun 2008-10-22
  • 打赏
  • 举报
回复
32,应该咋处理呢、

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧