在我的 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 shell,它们被专门设计为一个
或两个致命的缺陷,而依赖于一个诱发癫痫的网络
批处理文件来做他们的事情(嘿!也许这两者是相关的!?)
"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
VCUpgrade 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 似乎令人费解——我整天都在做这件事。是的,她就是这么说的。