函數可以連接任意兩個filter
HRESULT ConnectFilters( IBaseFilter *pSrc, IBaseFilter *pDest ) { IPin *pIn = 0; IPin *pOut = 0; IEnumPins *pOutEnum; IEnumPins *pInEnum; PIN_DIRECTION ThisPinDir; HRESULT hr = pSrc->EnumPins( &pOutEnum ); hr = pDest->EnumPins( &pInEnum ); while (pOutEnum->Next( 1, &pOut, NULL) == S_OK ) { hr = pOut->QueryDirection( &ThisPinDir ); while( ThisPinDir==PINDIR_OUTPUT && pInEnum->Next( 1, &pIn, 0 ) == S_OK ) { hr = pIn->QueryDirection( &ThisPinDir ); if( ThisPinDir==PINDIR_INPUT ) { // Try to connect them. hr = pigb->Connect( pOut, pIn); if(SUCCEEDED(hr)) { hr = pOutEnum->Release(); hr = pInEnum->Release(); hr = pIn->Release(); hr = pOut->Release(); return S_OK; } } hr = pIn->Release(); }//end while hr = pInEnum->Reset(); hr = pOut->Release(); }//end while pOutEnum->Reset(); hr = pOutEnum->Release(); hr = pInEnum->Release(); return E_FAIL; }