【问题标题】:VC++ Building directshow baseclassesVC++ 构建 directshow 基类
【发布时间】:2023-03-27 00:09:01
【问题描述】:

我是 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\”目录中构建所有源以获得必要的库。
我在那个目录中尝试了 nmake 并得到了以下结果:

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 的库一定如此困难。

【问题讨论】:

标签: c++ makefile directx platform-sdk


【解决方案1】:

Microsoft 已将 Platfrom SDK 重命名为 Windows SDK。最新的 Windows SDK 是 Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1

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

【讨论】:

  • 我又看了一眼,项目文件是针对 Visual Studio 2005 的。
【解决方案2】:

在我的 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 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 vcprojvcxproj

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 似乎令人费解——我整天都在做这件事。是的,她就是这么说的。

【讨论】:

  • 你这个 40 多岁的家伙! :)
【解决方案3】:

对我来说,这个错误意味着“打开 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2015-12-29
    • 2010-09-13
    • 2013-07-05
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多