简体   繁体   中英

How do i use samplegrabber in vc++ ? The samplegrabber is not defined

In visual community 2015 I have a c++ project. In the cpp file top I have

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

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

I also set when entering the project properties > VC++ Directories I added this directory in include: C:\\Program Files %28x86%29\\Microsoft SDKs\\Windows\\v7.1\\Samples\\multimedia\\directshow\\baseclasses

The problem is when I type in my code this:

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

The CLSID_SampleGrabber not defined.

What I tried so far ? Downloaded directx sdk 9 and 6 and Microsoft sdk 7.1 and searched in google for qedit.h but I didn't find the file. Can't figure out how to define the CLSID_SampleGrabber

CLSID_SampleGrabber was removed from Windows SDK long ago, you need as old as version 6.1 Windows SDK to find the declaration. The implementation was removed from Windows operating system only recently (Windows Server 2012?).

You can get it back to your project following 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)));

Linking amstrmid.lib is a good hint, but you almost never need CLSID_SampleGrabber alone, you also need ISampleGrabber and friends as well, and the library still hosting (as a side effect) the GUIDs don't get you that.

See also:

Declare it as follows: extern "C" { extern GUID CLSID_SampleGrabber; } extern "C" { extern GUID CLSID_SampleGrabber; }

Then be sure to link to amstrmid.lib. You can grep the symbol out of the libs directories, in case you need others.

I didn't test this completely as I didn't have the dshow sample files handy, but when I debugged it, it had resolved to c1f400a0-3f08-11d3-9f0b-006008039e37 or something like that; you can now find a lot more about it if you google for the first part of that GUID: sometimes with magic guids all you need is a tiny hook and then you can dig up the rest easily.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM