2016-04-12 5 views
1

В visual community 2015 у меня есть проект C++. В CPP файле сверху у меня естьКак использовать samplegrabber в vC++? Samplegrabber не определен

#include "stdafx.h" 
#include "VideoCaptureFilterSample.h" 
#include "VideoCaptureFilterSampleDlg.h" 

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

Я также установить при входе в свойства проекта> VC++ каталогов Я добавил этот каталог в включают: C: \ Program Files% 28x86% 29 \ Microsoft SDKs \ Windows \ v7. 1 \ Samples \ мультимедиа \ DirectShow \ BASECLASSES

проблема, когда я печатаю в моем коде это:

hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, 
     IID_PPV_ARGS(&pGrabberF)); 

CLSID_SampleGrabber не определен.

Что я пробовал до сих пор? Загрузили directx sdk 9 и 6 и Microsoft sdk 7.1 и искали в google для qedit.h, но я не нашел файл. Не могу понять, как определить CLSID_SampleGrabber

ответ

1

Объявляем его следующим образом: extern "C" { extern GUID CLSID_SampleGrabber; }

то обязательно ссылаются на amstrmid.lib. Вы можете grep символ из каталогов libs, если вам нужны другие.

Я не тестировал это полностью, так как у меня не было файлов примеров dshow, но когда я его отлаживал, он разрешил c1f400a0-3f08-11d3-9f0b-006008039e37 или что-то в этом роде; теперь вы можете найти гораздо больше об этом, если вы google для первой части этого GUID: иногда с волшебными подсказками все, что вам нужно, это крошечный крючок, а затем вы легко можете выкопать остальное.

+0

@Roman R «s, вероятно, лучшим ответом, но я клянусь, я имел, что GUID исправляется в первый раз. Это не имеет никакого значения, но по какой-то причине моя была другой. – zeromus

+0

Ваш CLSID был прав, я только что обновил его, чтобы быть точным. И все остальное хорошо. –

+0

Странно, я только что нашел 4 разных clsids из 4-х разных amstrmid.lib, включая 2 новых, чем версии SDK версии 6.1. Но у меня есть ваш реестр. Я думаю, что armstrmid.lib - это мусор для этой цели, и я должен удалить свой ответ, что вы думаете? – zeromus

2

CLSID_SampleGrabber был удален из Windows SDK давно, вам нужно знать как version 6.1 Windows SDK, чтобы найти декларацию. Реализация была удалена из операционной системы Windows только недавно (Windows Server 2012?).

Вы можете получить его обратно к вашему проекту следующие this example:

#pragma region Re-Adding Removed from Windows SDK qedit.h 

struct __declspec(uuid("0579154a-2b53-4994-b0d0-e773148eff85")) 
ISampleGrabberCB : IUnknown 

... 

struct __declspec(uuid("c1f400a0-3f08-11d3-9f0b-006008039e37")) 
SampleGrabber; 
    // [ default ] interface ISampleGrabber 

... 

CComPtr<IBaseFilter> pSgBaseFilter; 
ATLENSURE_SUCCEEDED(pSgBaseFilter.CoCreateInstance(__uuidof(SampleGrabber))); 

Образцы amstrmid.lib хороший намек, но вы почти никогда не нужно CLSID_SampleGrabber в одиночку, вы также должны ISampleGrabber и друзей, а также, и библиотека, все еще находящаяся в хостинге (как побочный эффект), GUID не получают вас.

Смотрите также:

 Смежные вопросы

  • Нет связанных вопросов^_^