在visual community 2015中,我有一个c++项目。在cpp文件的顶部,我有
#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++目录
问题是当我输入我的代码时:
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
发布于 2016-04-13 12:58:38
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的库(作为副作用)不会让你做到这一点。
另请参阅:
发布于 2016-04-13 09:26:11
按如下方式声明它:extern "C" { extern GUID CLSID_SampleGrabber; }
然后一定要链接到amstrmid.lib。您可以从libs目录中grep该符号,以防需要其他符号。
我没有完全测试它,因为我手头没有dshow示例文件,但当我调试它时,它已经解析为c1f400a0-3f08-11d3-9f0b-006008039e37或类似的东西;如果您现在搜索该GUID的第一部分,您可以找到更多关于它的信息:有时使用魔法GUID,您只需要一个小钩子,然后就可以很容易地找到剩下的部分。
https://stackoverflow.com/questions/36585779
复制相似问题