C++ 如何将Qedit.h从DirectShow包含到项目中?

C++ 如何将Qedit.h从DirectShow包含到项目中?,c++,winapi,directshow,C++,Winapi,Directshow,我需要实现这个接口ISampleGrabber 据我所知,这个文件应该在Windows SDK中,所以我从Visual Studio安装程序下载了Windows SDK 但我仍然无法打开源代码文件 我做错了什么 编辑 通过上面页面上的链接,我下载了这样的文件winsdk\u web.exe,当我试图安装它时,我得到了这样的弹出窗口 根据这个弹出消息,我需要从这个链接安装.netframework4.0 所以,我下载了这个文件,并试图安装它,但收到另一条消息 这里有什么问题 编辑 我在

我需要实现这个接口
ISampleGrabber

据我所知,这个文件应该在Windows SDK中,所以我从Visual Studio安装程序下载了Windows SDK

但我仍然无法打开源代码文件

我做错了什么

编辑

通过上面页面上的链接,我下载了这样的文件
winsdk\u web.exe
,当我试图安装它时,我得到了这样的弹出窗口

根据这个弹出消息,我需要从这个链接安装
.netframework4.0

所以,我下载了这个文件,并试图安装它,但收到另一条消息

这里有什么问题

编辑

我在C++中是新手,但它看起来很奇怪:“你有一个文档,它写的是你需要使用特定接口的东西,但是这个接口你几乎找不到任何地方,但是这里你可以下载SDK,但是最终它都没有帮助,而且只有解决办法是添加这个代码,尼斯:”/P>

#pragma一次
#包括
#包括
#包括
类uu declspec(uuid({C1F400A4-3F08-11D3-9F0B-006008039E37})))空呈现器;
类uu declspec(uuid({C1F400A0-3F08-11D3-9F0B-006008039E37})))样本采集卡;
#布拉格马区域采样仪
结构说明(uuid(“0579154a-2b53-4994-b0d0-e773148eff85”))
ISampleGrabberCB:IUnknown
{
//
//接口提供的原始方法
//
虚拟HRESULT\uu stdcall样本b(
双采样时间,
结构IMediaSample*pSample=0;
虚拟HRESULT\uu stdcall BufferCB(
双采样时间,
未签名字符*pBuffer,
长缓冲长度=0;
};
结构说明(uuid(“6B652FF-11fe-4fce-92ad-0266b5d7c78f”))
ISampleGrabber:IUnknown
{
//
//接口提供的原始方法
//
虚拟HRESULT\uu stdcall SetOneShot(
长单次)=0;
虚拟HRESULT\uu stdcall SetMediaType(
结构(AMMediaType*pType)=0;
虚拟HRESULT\uu stdcall GetConnectedMediaType(
结构(AMMediaType*pType)=0;
虚拟HRESULT\uu stdcall SetBufferSamples(
长缓冲区=0;
虚拟HRESULT\uu stdcall GetCurrentBuffer(
/*[in,out]*/long*pBufferSize,
/*[out]*/long*pBuffer)=0;
虚拟HRESULT\uu stdcall GetCurrentSample(
/*[out,retval]*/struct IMediaSample**ppSample)=0;
虚拟HRESULT\uu stdcall SetCallback(
结构ISampleGrabberCB*pcCallback,
long WhichMethodToCallback)=0;
};
结构说明(uuid(“c1f400a0-3f08-11d3-9f0b-006008039e37”))
样品采集器;
//[默认]接口是SampleGrabber
#布拉格端区
class TV_音频解码器:公共ISampleGrabber
{
公众:
电视音频解码器();
~TV_AudioDecoder();
公众:
虚拟HRESULT\uu stdcall SetOneShot(长OneShot)覆盖;
虚拟HRESULT\uu stdcall SetMediaType(结构\u AMMediaType*pType)重写;
虚拟HRESULT\u stdcall GetConnectedMediaType(结构\u AMMediaType*pType)重写;
虚拟HRESULT_uustdcall SetBufferSamples(长缓冲区)覆盖;
虚拟HRESULT\uu stdcall GetCurrentBuffer(/*[in,out]*/long*pBufferSize,/*[out]*/long*pBuffer)重写;
虚拟HRESULT\uu stdcall GetCurrentSample(/*[out,retval]*/struct IMediaSample**ppSample)重写;
虚拟HRESULT\uuu stdcall SetCallback(结构为SampleGrabberCB*pCallback,long WhichMethodToCallback)重写;
};

假设这是我的代码,这是正确的使用方式吗?我什么都没错过?

Qedit.h在过去的某个时候被排除在Windows SDK之外,因为DirectShow编辑服务遭到了反对。从那时起,所有版本的Windows中都出现了Still runtime

您不需要安装任何东西,反之亦然,安装古代SDK不会让您的生活变得更轻松

只要将必要的标题复制/粘贴到您的项目中,您就可以开始了

例如,中提到了要复制/粘贴的内容。你可以通过
#import
在那里找到我的答案,它也应该可以工作。到2020年为止,我仍然建议复制/粘贴缺少的标题

UPD

//
#包括
#包括
#包括
类uu declspec(uuid({C1F400A4-3F08-11D3-9F0B-006008039E37})))空呈现器;
类uu declspec(uuid({C1F400A0-3F08-11D3-9F0B-006008039E37})))样本采集卡;
#布拉格马区域采样仪
结构说明(uuid(“0579154a-2b53-4994-b0d0-e773148eff85”))
ISampleGrabberCB:IUnknown
{
//
//接口提供的原始方法
//
虚拟HRESULT\uu stdcall样本b(
双采样时间,
结构IMediaSample*pSample=0;
虚拟HRESULT\uu stdcall BufferCB(
双采样时间,
未签名字符*pBuffer,
长缓冲长度=0;
};
结构说明(uuid(“6B652FF-11fe-4fce-92ad-0266b5d7c78f”))
ISampleGrabber:IUnknown
{
//
//接口提供的原始方法
//
虚拟HRESULT\uu stdcall SetOneShot(
长单次)=0;
虚拟HRESULT\uu stdcall SetMediaType(
结构(AMMediaType*pType)=0;
虚拟HRESULT\uu stdcall GetConnectedMediaType(
结构(AMMediaType*pType)=0;
虚拟HRESULT\uu stdcall SetBufferSamples(
长缓冲区=0;
虚拟HRESULT\uu stdcall GetCurrentBuffer(
/*[in,out]*/long*pBufferSize,
/*[out]*/long*pBuffer)=0;
虚拟HRESULT\uu stdcall GetCurrentSample(
/*[out,retval]*/struct IMediaSample**ppSample)=0;
虚拟HRESULT\uu stdcall SetCallback(
结构ISampleGrabberCB*pcCallback,
long WhichMethodToCallback)=0;
};
结构说明(uuid(“c1f400a0-3f08-11d3-9f0b-006008039e37”))
样品采集器;
//[默认]接口是SampleGrabber
#布拉格端区
// 
另见:

<>我在C++中是新手,但对我来说看起来很奇怪:……[/P>] 这不完全是abo
#pragma once

#include <dshow.h>
#include <dvdmedia.h>
#include <dmodshow.h>

class __declspec(uuid("{C1F400A4-3F08-11D3-9F0B-006008039E37}")) NullRenderer;
class __declspec(uuid("{C1F400A0-3F08-11D3-9F0B-006008039E37}")) SampleGrabber;

#pragma region SampleGrabber

struct __declspec(uuid("0579154a-2b53-4994-b0d0-e773148eff85"))
    ISampleGrabberCB : IUnknown
{
    //
    // Raw methods provided by interface
    //

    virtual HRESULT __stdcall SampleCB(
        double SampleTime,
        struct IMediaSample * pSample) = 0;
    virtual HRESULT __stdcall BufferCB(
        double SampleTime,
        unsigned char * pBuffer,
        long BufferLen) = 0;
};

struct __declspec(uuid("6b652fff-11fe-4fce-92ad-0266b5d7c78f"))
    ISampleGrabber : IUnknown
{
    //
    // Raw methods provided by interface
    //

    virtual HRESULT __stdcall SetOneShot(
        long OneShot) = 0;
    virtual HRESULT __stdcall SetMediaType(
        struct _AMMediaType * pType) = 0;
    virtual HRESULT __stdcall GetConnectedMediaType(
        struct _AMMediaType * pType) = 0;
    virtual HRESULT __stdcall SetBufferSamples(
        long BufferThem) = 0;
    virtual HRESULT __stdcall GetCurrentBuffer(
        /*[in,out]*/ long * pBufferSize,
        /*[out]*/ long * pBuffer) = 0;
    virtual HRESULT __stdcall GetCurrentSample(
        /*[out,retval]*/ struct IMediaSample * * ppSample) = 0;
    virtual HRESULT __stdcall SetCallback(
        struct ISampleGrabberCB * pCallback,
        long WhichMethodToCallback) = 0;
};

struct __declspec(uuid("c1f400a0-3f08-11d3-9f0b-006008039e37"))
    SampleGrabber;
// [ default ] interface ISampleGrabber

#pragma endregion

class TV_AudioDecoder : public ISampleGrabber
{
public:
    TV_AudioDecoder();
    ~TV_AudioDecoder();

public:
    virtual HRESULT __stdcall SetOneShot(long OneShot) override;
    virtual HRESULT __stdcall SetMediaType(struct _AMMediaType * pType) override;
    virtual HRESULT __stdcall GetConnectedMediaType(struct _AMMediaType * pType) override;
    virtual HRESULT __stdcall SetBufferSamples(long BufferThem) override;
    virtual HRESULT __stdcall GetCurrentBuffer(/*[in,out]*/ long * pBufferSize, /*[out]*/ long * pBuffer) override;
    virtual HRESULT __stdcall GetCurrentSample(/*[out,retval]*/ struct IMediaSample * * ppSample) override;
    virtual HRESULT __stdcall SetCallback(struct ISampleGrabberCB * pCallback, long WhichMethodToCallback) override;
};
// <your regular includes>

#include <dshow.h>
#include <dvdmedia.h>
#include <dmodshow.h>

class __declspec(uuid("{C1F400A4-3F08-11D3-9F0B-006008039E37}")) NullRenderer;
class __declspec(uuid("{C1F400A0-3F08-11D3-9F0B-006008039E37}")) SampleGrabber;

#pragma region SampleGrabber

struct __declspec(uuid("0579154a-2b53-4994-b0d0-e773148eff85"))
ISampleGrabberCB : IUnknown
{
    //
    // Raw methods provided by interface
    //

      virtual HRESULT __stdcall SampleCB (
        double SampleTime,
        struct IMediaSample * pSample ) = 0;
      virtual HRESULT __stdcall BufferCB (
        double SampleTime,
        unsigned char * pBuffer,
        long BufferLen ) = 0;
};

struct __declspec(uuid("6b652fff-11fe-4fce-92ad-0266b5d7c78f"))
ISampleGrabber : IUnknown
{
    //
    // Raw methods provided by interface
    //

      virtual HRESULT __stdcall SetOneShot (
        long OneShot ) = 0;
      virtual HRESULT __stdcall SetMediaType (
        struct _AMMediaType * pType ) = 0;
      virtual HRESULT __stdcall GetConnectedMediaType (
        struct _AMMediaType * pType ) = 0;
      virtual HRESULT __stdcall SetBufferSamples (
        long BufferThem ) = 0;
      virtual HRESULT __stdcall GetCurrentBuffer (
        /*[in,out]*/ long * pBufferSize,
        /*[out]*/ long * pBuffer ) = 0;
      virtual HRESULT __stdcall GetCurrentSample (
        /*[out,retval]*/ struct IMediaSample * * ppSample ) = 0;
      virtual HRESULT __stdcall SetCallback (
        struct ISampleGrabberCB * pCallback,
        long WhichMethodToCallback ) = 0;
};

struct __declspec(uuid("c1f400a0-3f08-11d3-9f0b-006008039e37"))
SampleGrabber;
    // [ default ] interface ISampleGrabber

#pragma endregion

// <your code>