VC ++构建directshow基类

时间:2010-01-07 04:25:37

标签: c++ makefile directx platform-sdk

我是DirectX SDK,Platfrom SDK和DirectShow的新手。我在2009年8月下载了最新的Platform SDK和DirectX SDK。我试图在文件夹中构建示例项目:

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 \”目录中构建所有源代码以获取必要的库。
我在那个dir尝试了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)

我做错了什么?简直无法相信,使用微软的图书馆必须如此努力。

3 个答案:

答案 0 :(得分:3)

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项目文件。

答案 1 :(得分:1)

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

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

打开常规的旧cmd.exe

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

如果您收到的错误是没有安装 VCBuild.exe ,那是因为  sln和各种项目文件(例如:C / C ++ vcproj )很古老,下一个命令会  很好地升级它们,将旧的stanky 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"

请注意,基类发布版本会使 strmbase.lib  和调试使 strmbasd.lib amcap需要发布构建tho amcap的构建可以调试

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

使用MsSdk的 SetEnv.Cmd 可以避免所有 vsvars32.bat 陷入困境 作为800万个不同的cmd外壳,专门设计为一个 或两个致命的缺陷远离实际工作,而依靠一个eplipsy诱导网络 批量文件做他们的事情(嘿!也许两者是相关的!?)

"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)

设置编译器,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 - 我整天都在那件事。是的,这就是她所说的。

答案 2 :(得分: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