我在通过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的问题?为什么它会自行编译,而不是在更大的项目环境中编译?
我猜有一个循环依赖,但我不确定如何跟踪它。它当然不是我自己制作的,它更可能隐藏在某处包含的标题。
答案 0 :(得分:1)
解决方案似乎是使用
#define WIN32_LEAN_AND_MEAN
在头文件中,并将此标头的所有包含移动到包含它的任何其他文件中的任何#include指令的顶部。现在,这段代码既可以单独编译,也可以在更大的项目环境中编译。