IMFSourceReaderCallback:基类未定义

时间:2016-06-23 17:39:05

标签: c++ ms-media-foundation

我在通过Media Foundation从摄像机读取样本时遇到了一些麻烦。我正在关注Windows SDK示例文件夹MFCaptureToFile中的示例。

据我所知,我的类设置正确,可以从抽象的IMFSourceReaderCallback类继承:

#include <windows.h>
#include <mfapi.h>
#include <mfidl.h>
#include <mfreadwrite.h>

class WinCapture : public IMFSourceReaderCallback{

public:

    static HRESULT CreateInstance(
        std::string deviceName,
        WinCapture **winCapture 
        );

    // IUnknown methods
    STDMETHODIMP QueryInterface(REFIID iid, void** ppv);
    STDMETHODIMP_(ULONG) AddRef();
    STDMETHODIMP_(ULONG) Release();

    // IMFSourceReaderCallback methods
    STDMETHODIMP OnReadSample(
        HRESULT hrStatus,
        DWORD dwStreamIndex,
        DWORD dwStreamFlags,
        LONGLONG llTimestamp,
        IMFSample *pSample
        );

    STDMETHODIMP OnEvent(DWORD, IMFMediaEvent *)
    {
        return S_OK;
    }

    STDMETHODIMP OnFlush(DWORD)
    {
        return S_OK;
    }

}

如果我自己编译这段代码,它编译得很好。但是,如果我希望在更大的项目中使用此类,则会给出错误。有没有关于我如何在其他文件中包含winCapture.h的问题?为什么它会自行编译,而不是在更大的项目环境中编译?

我猜有一个循环依赖,但我不确定如何跟踪它。它当然不是我自己制作的,它更可能隐藏在某处包含的标题。

1 个答案:

答案 0 :(得分:1)

解决方案似乎是使用

#define WIN32_LEAN_AND_MEAN

在头文件中,并将此标头的所有包含移动到包含它的任何其他文件中的任何#include指令的顶部。现在,这段代码既可以单独编译,也可以在更大的项目环境中编译。