繁体   English   中英

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

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

在视觉社区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

CLSID_SampleGrabber很久以前就从Windows SDK中删除了,您需要与版本6.1 Windows SDK一样旧的才能找到声明。 最近才将实施从Windows操作系统中删除(Windows Server 2012?)。

您可以按照以下示例将其恢复到项目中:

#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的库不能得到你。

也可以看看:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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