2012-06-02 75 views
0

我想實現IPinFlowControl接口,它有一個Block方法。如何在Directshow中實現IPinFlowControl接口

i相下面的代碼曾試圖,

Mux::NonDelegatingQueryInterface(REFIID iid, void** ppv) 
{ 
    if(iid==IID_IPinFlowControl) 
    { 
    return GetInterface((IPinFlowControl*) this, ppv); 
    } 

    return CBaseFilter::NonDelegatingQueryInterface(iid, ppv); 
} 


STDMETHODIMP Mux::Block(DWORD dwBlockFlags,HANDLE hEvent) 
{ 
    return S_OK; 
} 

和登記上述過濾器。

現在

在代碼中,我創建上述過濾器的情況下,連接它的輸出引腳,然後嘗試

IPin *pMuxOut2 = NULL; 
hr = FindUnconnectedPin(mux,PINDIR_OUTPUT,&pMuxOut2); 

IPinFlowControl *pinFlowControl=NULL; 

hr=pMuxOut2->QueryInterface(IID_IPinFlowControl,(void**)&pinFlowControl); 

但我pinFlowControl得到E_NonInterface,

還請大家幫我正確地實現塊的方法來阻止和Unblock輸出。

回答

0

看起來像您在過濾器上實現了接口,但是在引腳上查詢該接口。

如果您想在引腳上創建該接口,則需要創建該接口,並且必須創建一個使用該引腳實現的濾波器。

+0

謝謝@Wimmel,我會看出來,並會回你:) – meghana

1

如果你打算在你的過濾器上實現IPinFlowControl,你應該看看基類中提供的CDynamicOutputPin類。

Synth Filter Sample在Windows SDK中爲您提供了一個從此類派生的示例。

+0

謝謝@羅曼河,我會看看它很快:) – meghana