在我的 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.lib
和 Debug 使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
VC将vcproj 升级到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似乎令人费解——我整天都在做这件事。是的,这就是她所说的。