首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在vc++中使用samplegrabber?未定义samplegrabber

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

Stack Overflow用户
提问于 2016-04-13 07:16:50
回答 2查看 1.1K关注 0票数 2

在visual community 2015中,我有一个c++项目。在cpp文件的顶部,我有

代码语言:javascript
复制
#include "stdafx.h"
#include "VideoCaptureFilterSample.h"
#include "VideoCaptureFilterSampleDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

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

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

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2016-04-13 12:58:38

CLSID_SampleGrabber很久以前就从Windows SDK中删除了,你需要像version 6.1 Windows SDK一样古老才能找到这个声明。该实施最近才从Windows操作系统中删除(Windows Server 2012?)。

您可以在this example之后将其返回到您的项目中

代码语言:javascript
复制
#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的库(作为副作用)不会让你做到这一点。

另请参阅:

票数 3
EN

Stack Overflow用户

发布于 2016-04-13 09:26:11

按如下方式声明它:extern "C" { extern GUID CLSID_SampleGrabber; }

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

我没有完全测试它,因为我手头没有dshow示例文件,但当我调试它时,它已经解析为c1f400a0-3f08-11d3-9f0b-006008039e37或类似的东西;如果您现在搜索该GUID的第一部分,您可以找到更多关于它的信息:有时使用魔法GUID,您只需要一个小钩子,然后就可以很容易地找到剩下的部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36585779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档