【问题标题】:ISampleGrabber undeclared identifierISampleGrabber 未声明的标识符
【发布时间】:2014-06-10 10:59:06
【问题描述】:

我正在尝试执行由 graphEditPlus 生成的代码(使用 VS2010),但遇到以下问题:

CComQIPtr<ISampleGrabber, &IID_ISampleGrabber> pSampleGrabber_isg(pSampleGrabber);

错误在哪里: 错误 C2065:“ISampleGrabber”:未声明的标识符 错误 C2065:“IID_ISampleGrabber”:未声明的标识符 错误 C2514:“ATL::CComQIPtr”:类没有构造函数

我尝试下载不同版本的 Windows SDK(V7.1、V6.0A、V5)并设置了包含/库路径,但仍然遇到同样的问题!

是否仍支持 SampleGrabber?主要是,我的代码中使用 SampleGrabber 从视频捕获源中抓取帧...

感谢您的帮助...

【问题讨论】:

  • this link 有帮助吗?
  • 我终于设法从旧的 SDK 版本(V5、V6.0)恢复 qedit.h 并使用 ifndef/def 来处理丢失的“dxtrans.h”。这部分解决了问题,但现在我得到以下内容:错误 C2970:'ATL::CComQIPtr':模板参数'piid':'IID_ISampleGrabber':涉及具有内部链接的对象的表达式不能用作非类型参数

标签: c++ winapi image-processing directshow graphedit


【解决方案1】:

Microsoft 已弃用 Sample Grabber 和整个 DES API,但是如果您导入类型库,或者只是将声明复制到您的项目中 - 该组件仍然可用,除了一些最新的操作系统版本(Windows Server 2008?)完全没有了,您可能需要其他解决方案,例如从早期的 SDK 示例构建您自己的解决方案。

更多信息请参见ISampleGrabber deprecated: where can I find alternatives?

另请参阅 RenderWmvVideo.cpp 代码片段以复制/粘贴并将声明重新添加到您的项目(文件顶部的#pragma 部分):

#pragma region Windows SDK Tribute, qedit.h

struct __declspec(uuid("0579154a-2b53-4994-b0d0-e773148eff85"))
ISampleGrabberCB : IUnknown
{

...

#pragma endregion

【讨论】:

  • 感谢@Roman,我假设在您的代码中添加了 pragma 部分以避免包含 qedit.h 。这有助于将它们定义为包含它的情况,我最终得到错误 C2970:'ATL::CComQIPtr':模板参数'piid':'IID_ISampleGrabber':涉及具有内部链接的对象的表达式不能用作非类型参数。无论如何 pSampleGrabber_isg 旨在设置媒体类型,似乎在评论这一行时,我能够成功运行代码。
  • 由于 ISampleGrabber 现在已成功定义,我会将您的答案视为可行的解决方案。谢谢!
  • CComQIPtr&lt;ISampleGrabber&gt; 就足够了。您必须使用 , IID_... 来定义未附加 UUID 的 [旧] 接口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 2021-06-07
  • 2016-04-09
  • 2020-12-09
  • 2016-04-22
相关资源
最近更新 更多