c++ - 如何在 vc++ 中使用samplegrabber?样本采集器未定义

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

在 Visual Community 2015 我有一个 C++ 项目。 在 cpp 文件顶部我有

#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\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 并在 google 中搜索 qedit.h 但我没有找到该文件。无法弄清楚如何定义 CLSID_SampleGrabber

最佳答案

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 和 friend ,并且该库仍然托管(如副作用)GUID 无法帮助您实现这一点。

另请参阅:

关于c++ - 如何在 vc++ 中使用samplegrabber?样本采集器未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36585779/

相关文章:

c++ - 这个类的析构函数是什么样的?

C++:使用 get() 读取文件;没有按预期工作

visual-c++ - 霍夫变换未检测到的突出线条

python-3.x - OpenCV从多个文件中提取第n个帧

video - 当 got_picture_ptr 为 0 时,avcodec_decode_video2 返回正数

c++ - 从类外给类内变量赋值

c++ - 我可以在使用前定义吗

c++ - 为什么我不能将 std::map 的条目解压到引用中?

ios - iPad MoviePlayer 在设备重启之前拒绝播放视频

.net - 用visual studio开发和编译的c++程序