4

我是 DirectX SDK、Platfrom SDK 和 DirectShow 的新手。我下载了最新的 Platform SDK 和 DirectX SDK August'09。我试图在文件夹中构建示例项目:

Microsoft Platform SDK\Samples\Multimedia\DirectShow\Capture\PlayCap\  

并有以下构建错误:

LINK : fatal error LNK1181: cannot open input file 'D:\Program Files\
Microsoft Platform SDK\samples\multimedia\directshow\baseclasses\
WIN2000_DEBUG\strmbasd.lib'

据我了解,我需要在“Microsoft Platform SDK\Samples\Multimedia\DirectShow\BaseClasses\”目录中构建所有源以获得必要的库。
我在那个目录中尝试了 nmmake 并得到了以下结果:

D:\Program Files\Microsoft Platform SDK\Samples\Multimedia\DirectShow\
BaseClasses\ctlutil.h(278) : error C4430: missing type specifier - int
assumed. Note: C++ does not support default-int.

这是该行的代码:

278: STDMETHODIMP
279: CMediaEvent::NonDelegatingQueryInterface(REFIID riid, void **ppv)

我做错了什么?简直不敢相信,使用 Microsoft 的库一定如此困难。

4

3 回答 3

3

Microsoft 已将 Platfrom SDK 重命名为 Windows SDK。最新的 Windows SDK 是适用于 Windows 7 和 .NET Framework 3.5 SP1 的 Microsoft Windows SDK

适用于 Windows 7 的 Windows SDK 具有适用于所有 DirectShow 项目的 Visual Studio 2008 2005 项目文件。

于 2010-01-07T07:57:26.853 回答
1

在我的 Xp64 机器上,我设法构建了 DirectShow 基类库,以便运行 amcap 示例。我安装了 2010 年 6 月的 Microsoft DirectX SDK 以及适用于 Windows 7 (7.1) 的 Microsoft Windows SDK 以及所有 C/C++ 编译器。

首先,我们必须编译 DirectShow 基类:

打开一个普通的旧 cmd.exe

cd C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses

如果您收到关于未安装VCBuild.exe的错误,那是因为 sln 和各种项目文件(例如:C/C++ vcproj)是古老的,下一个命令将很好地升级它们,将旧的臭名昭著的vcproj文件更改为新的垃圾文件vcxproj文件 VCUpgrade 在我的机器上:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vcupgrade.exe

请注意,即使在尝试了对vcupgrade的各种参数组合之后,使用msbuild构建 sln也是不行的(文档是危险的),所以我不得不直接编译我留下了名为 SLN 的批处理文件 var 因为我是真正的革命者

VCUpgrade -nologo -overwrite baseclasses.vcproj

这使得编译不同的配置变得更容易

set SLN="baseclasses.vcxproj"

请注意,基类Release构建使strmbase.libDebug 使strmbasd.lib amcap 需要Release构建,但 amcap 的构建可以调试

A) 编译发布 Win32 (== x86)

使用 MsSdk 的SetEnv.Cmd可以让您避免所有vsvars32.bat的泥潭以及 800 万种不同的 cmd 外壳,这些外壳经过专门设计,在依赖于 eplipsy-inducing web of batch 时与实际工作相距一两个致命缺陷文件做他们的事情(嘿!也许这两个是相关的!?)

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /release /x86 /xp

使用 64 位版本的MSBuild (也许是目标?)我没有任何运气,但是 x86 MSBuild一直在工作没有问题

"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" %SLN% /p:Configuration=Release /p:Platform=Win32

B) 编译发布 X64

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /release /x64 /2003

"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" %SLN% /p:Configuration=Release /p:Platform=X64

其次,我们现在可以编译两个版本的amcap

打开一个普通的旧cmd.exe

cd C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\capture\amcap

VCvcproj 升级vcxproj

VCUpgrade -nologo -overwrite amcap.vcproj

set SLN="amcap.vcxproj"

A) 编译调试 Win32 (== x86)

设置 compiler,lib,include,... 路径然后编译

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /debug /x86 /xp

"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" %SLN% /p:Configuration=Debug /p:Platform=Win32

B) 编译调试 X64

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /debug /x64 /2003

"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" %SLN% /p:Configuration=Debug /p:Platform=X64

我使用SysInternals * Process Explorer * 来验证每个 exe 实际上分别是 32 位和 64 位。与我共事过的大多数开发人员甚至都不知道Process Explorer似乎令人费解——我整天都在做这件事。是的,这就是她所说的。

于 2013-05-16T12:40:36.777 回答
0

对我来说,这个错误意味着“打开 C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\baseclasses.sln”(在我的情况下,在 Visual Studio Express 2010 中)它要求转换它,这样做,然后构建“发布”和“调试”。

然后在您自己的项目中,在您的项目的项目设置下

示例:添加 G:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses 到“VC++ 目录”的开头包含路径,以及G:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\debug您的 lib 路径(其中的任何位置)。

另请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/dd407279(v=vs.85).aspx

于 2016-05-11T11:00:03.030 回答