Aufzählen von Pins
Filter unterstützen die IBaseFilter::EnumPins-Methode, die die im Filter verfügbaren Pins auflistet. Sie gibt einen Zeiger auf die IEnumPins-Schnittstelle zurück. Die IEnumPins::Next-Methode ruft IPin-Schnittstellenzeker ab.
Das folgende Beispiel zeigt eine Funktion, die eine Stecknadel mit einer bestimmten Richtung (Eingabe oder Ausgabe) in einem bestimmten Filter sucht. Sie verwendet die PIN _ DIRECTION-Enumeration, um die Pinrichtung anzugeben, und die IPin::QueryDirection-Methode, um die Richtung der einzelnen aufgelisteten Stecknadeln zu finden. Wenn diese Funktion einen übereinstimmenden Pin findet, gibt sie einen IPin-Schnittstellenzeiger mit einer ausstehenden Verweisanzahl zurück. Der Aufrufer ist für die Freigabe der Schnittstelle verantwortlich.
HRESULT GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir, IPin **ppPin)
{
IEnumPins *pEnum = NULL;
IPin *pPin = NULL;
HRESULT hr;
if (ppPin == NULL)
{
return E_POINTER;
}
hr = pFilter->EnumPins(&pEnum);
if (FAILED(hr))
{
return hr;
}
while(pEnum->Next(1, &pPin, 0) == S_OK)
{
PIN_DIRECTION PinDirThis;
hr = pPin->QueryDirection(&PinDirThis);
if (FAILED(hr))
{
pPin->Release();
pEnum->Release();
return hr;
}
if (PinDir == PinDirThis)
{
// Found a match. Return the IPin pointer to the caller.
*ppPin = pPin;
pEnum->Release();
return S_OK;
}
// Release the pin for the next time through the loop.
pPin->Release();
}
// No more pins. We did not find a match.
pEnum->Release();
return E_FAIL;
}
Diese Funktion kann problemlos so geändert werden, dass der n-te Pin in der angegebenen Richtung oder der n-th unconnected pin (n-th-Stift ohne Verbindung) zurück gibt. (Um herauszufinden, ob eine Stecknadel mit einem anderen Pin verbunden ist, rufen Sie die IPin::ConnectedTo-Methode auf.)