Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
Filter unterstützen die IBaseFilter::EnumPins-Methode , die die für den Filter verfügbaren Pins auflistet. Sie gibt einen Zeiger auf die IEnumPins-Schnittstelle zurück. Die IEnumPins::Next-Methode ruft IPin-Schnittstellenzeiger ab.
Das folgende Beispiel zeigt eine Funktion, die eine Pin mit einer bestimmten Richtung (Eingabe oder Ausgabe) für einen bestimmten Filter sucht. Es verwendet die PIN_DIRECTION-Enumeration , um die Pinrichtung anzugeben, und die IPin::QueryDirection-Methode , um die Richtung der einzelnen aufgezählten Pins zu ermitteln. 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 leicht geändert werden, um den n-ten Pin mit der angegebenen Richtung oder den nichtverbundenen Pin zurückzugeben. (Um herauszufinden, ob eine Pin mit einer anderen Pin verbunden ist, rufen Sie die IPin::ConnectedTo-Methode auf.)
Zugehörige Themen