2016-06-23 23 views
1

Media Foundationを使用してビデオカメラからサンプルを読み込む際に問題があります。私は、Windows SDKのサンプルフォルダMFCaptureToFileの例に従っています。IMFSourceReaderCallback:基底クラスが未定義

私のクラスは私の知る限り、抽象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

"基本クラス未定義"は、コンパイラが 'IMFSourceReaderCallback'定義を認識しないことを意味します。あなたはmfreadwrite.hを#includedしていますか? –

+0

はい、#includesをop​​に入れます。 – dmedine

+0

Visual Studio 2013では、上のコードスニペットはコンパイラを正常に通過します(リンカエラーがさらに表示されます)。 –

答えて

1

ソリューションは、ヘッダファイルに

#define WIN32_LEAN_AND_MEAN 

を使用すると、すべてのことが含まれる任意の他のファイル内の任意の#includeディレクティブの先頭にこのヘッダが含ま移動することのようです。このコードは、スタンドアロンでも、より大きなプロジェクトでもコンパイルできます。

関連する問題