我如何在vc ++中使用samplegrabber? samplegrabber未定义

时间:2016-04-12 23:16:50

标签: c++ visual-c++ video directshow samplegrabber

在视觉社区2015中,我有一个c ++项目。 在cpp文件顶部我有

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

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

我还在输入项目属性时设置> VC ++目录我在include中添加了这个目录:C:\ Program Files%28x86%29 \ Microsoft SDKs \ Windows \ v7.1 \ Samples \ multimedia \ directshow \ baseclasses

问题是当我输入我的代码时:

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

未定义CLSID_SampleGrabber。

到目前为止我尝试了什么?下载了directx sdk 9和6以及Microsoft sdk 7.1并在谷歌搜索qedit.h但我没有找到该文件。无法弄清楚如何定义CLSID_SampleGrabber

2 个答案:

答案 0 :(得分: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不能帮到你。

另见:

答案 1 :(得分:1)

声明如下:extern "C" { extern GUID CLSID_SampleGrabber; }

然后一定要链接到amstrmid.lib。您可以从libs目录中grep该符号,以防您需要其他目录。

我没有完全测试这个,因为我没有方便的dshow示例文件,但是当我调试它时,它已经解决了c1f400a0-3f08-11d3-9f0b-006008039e37或类似的事情;如果你谷歌获得GUID的第一部分,你现在可以找到更多关于它的信息:有时使用魔法指南你需要的只是一个小钩子然后你可以轻松地挖掘其余部分。