VC ++ Building DirectShow базовых классов - PullRequest
4 голосов
/ 07 января 2010

Я новичок в DirectX SDK, Platfrom SDK и DirectShow. Я скачал последние версии Platform SDK и DirectX SDK август'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 должно быть очень сложным.

Ответы [ 3 ]

3 голосов
/ 07 января 2010

Microsoft переименовала Platfrom SDK в Windows SDK.Самым последним Windows SDK является Microsoft Windows SDK для Windows 7 и .NET Framework 3.5 SP1 .

Windows SDK для Windows 7 содержит файлы проектов Visual Studio 2008 2005 для всехПроекты DirectShow.

1 голос
/ 16 мая 2013

На моем компьютере Xp64 мне удалось собрать библиотеки базовых классов DirectShow для запуска примера amcap. У меня установлен Microsoft DirectX SDK в июне 2010 года, а также Microsoft Windows SDK для Windows 7 (7.1) со всеми компиляторами C / C ++.

Сначала мы должны скомпилировать базовые классы DirectShow:

открыть обычный старый cmd.exe

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

Если вы получаете сообщение об ошибке, если VCBuild.exe не установлен, это потому, что sln и различные файлы проекта (например, C / C ++ vcproj ) являются древними, следующая команда будет обновите их, изменив старые файлы stanky vcproj на новые файлы crappy vcxproj VCUpgrade находится здесь на моей машине:

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

Обратите внимание, что даже после попытки различных комбинаций параметров для vcupgrade , сборка sln с помощью msbuild не требуется (docs be dangs), поэтому мне пришлось напрямую скомпилировать проект Я все равно оставил командный файл var с именем SLN, потому что я настоящий революционер

VCUpgrade -nologo -overwrite baseclasses.vcproj

Это упрощает компиляцию различных конфигураций.

set SLN="baseclasses.vcxproj"

Обратите внимание, что базовые классы Release build делают strmbase.lib и Debug делает strmbasd.lib amcap требуется сборка Release , так как сборка amcap может быть отлажена

A) Компилировать Выпуск Win32 (== x86)

Использование MsSdk SetEnv.Cmd позволяет вам избежать всего этого vsvars32.bat болото, а также как 8 миллионов различных оболочек CMD, которые были специально разработаны, чтобы быть одним или два роковых недостатка от реальной работы, полагаясь на вызывающую эплипсию сеть пакетные файлы, чтобы сделать их вещь (эй! может быть, два связаны!?)

"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, ... paths и затем скомпилировать

"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 *, чтобы убедиться, что каждый исполняемый файл был 32-битным и 64-битным соответственно. Кажется необъяснимым, что большинство разработчиков, с которыми я работал, даже не знают о Process Explorer - я занимаюсь этим весь день. И да, это то, что она сказала.

0 голосов
/ 11 мая 2016

Для меня эта ошибка означала "открыть C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Samples \ multimedia \ directshow \ baseclasses \ baseclasses.sln" (в моем случае, в Visual Studio Express 2010): чтобы преобразовать его, сделайте это, затем скомпонуйте «release» и «debug».

Затем в вашем собственном проекте, в настройках проекта для вашего проекта

пример: добавить 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 к пути к вашей библиотеке (где угодно).

Смотри также https://msdn.microsoft.com/en-us/library/windows/desktop/dd407279(v=vs.85).aspx

...