如何在vc++?未定义samplegrabber 视觉社区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 SDK\Windows\v7.1\Samples\multimedia\directshow\baseclasses 问题是,当我键入代码时:如何在vc++?未定义samplegrabber 视觉社区2015中有一个C++项目。 在cpp文件中,我有 #include "stdafx.h" #include "VideoCaptureFilterSample.h" #include "VideoCaptureFilterSampleDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif,c++,visual-c++,video,directshow,samplegrabber,C++,Visual C++,Video,Directshow,Samplegrabber,在输入项目属性>VC++目录时,我还设置了以下目录:C:\Program Files%28x86%29\Microsoft SDK\Windows\v7.1\Samples\multimedia\directshow\baseclasses 问题是,当我键入代码时: hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGrabberF)); 未定义CL
hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pGrabberF));
未定义CLSID_采样捕获器
到目前为止我试过什么?下载了directx sdk 9和6以及Microsoft sdk 7.1,并在google中搜索qedit.h,但我没有找到该文件。无法理解如何定义CLSID_SampleGrabber如下声明:
extern“C”{extern GUID CLSID_SampleGrabber;}
然后确保链接到amstrmid.lib。您可以将符号从libs目录中删除,以防需要其他符号
我没有完全测试它,因为我手头没有dshow示例文件,但当我调试它时,它已解析为
c1f400a0-3f08-11d3-9f0b-006008039e37
或类似的东西;如果你在谷歌上搜索GUID的第一部分,你现在可以找到更多关于它的信息:有时候,使用魔法GUID,你只需要一个小钩子,然后你就可以轻松地挖掘出其余部分。CLSID\u SampleGrabber
很久以前就从Windows SDK中删除了,你需要找到声明。该实现最近才从Windows操作系统中删除(Windows Server 2012?)
您可以通过以下方式将其返回到您的项目:
#从Windows SDK qedit.h中删除重新添加的杂注区域
结构说明(uuid(“0579154a-2b53-4994-b0d0-e773148eff85”))
ISampleGrabberCB:IUnknown
...
结构说明(uuid(“c1f400a0-3f08-11d3-9f0b-006008039e37”))
样品采集器;
//[默认]接口是SampleGrabber
...
CComPtr pSgBaseFilter;
ATLsure_成功(pSgBaseFilter.CoCreateInstance(uuuIdof(SampleGrabber));
链接amstrmid.lib是一个很好的提示,但是您几乎不需要单独使用CLSID\u SampleGrabber
,您还需要ISampleGrabber
和朋友,而库仍然承载guid(作为副作用),这一点您无法理解
另见:
#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)));