共用方式為


列舉針腳

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

篩選準則支援 IBaseFilter::EnumPins 方法,它會列舉篩選上可用的針腳。 它會傳回 IEnumPins 介面的指標。 IEnumPins::Next方法會擷取IPin介面指標。

下列範例顯示一個函式,該函式會尋找具有指定方向的針腳, (指定篩選準則上的輸入或輸出) 。 它會使用 PIN_DIRECTION 列舉來指定針腳方向,以及 IPin::QueryDirection 方法來尋找每個列舉針腳的方向。 如果此函式找到相符的針腳,它會傳回具有未完成參考計數的 IPin 介面指標。 呼叫端負責釋放介面。

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;  
}

此函式可以輕鬆地修改,以傳回具有指定方向的第 n 個針腳,或 第 n個未連接針腳。 (若要找出針腳是否已連線到另一個針腳,請呼叫 IPin::ConnectedTo 方法。)

列舉篩選圖形中的物件

在篩選上尋找未連線的釘選

一般Graph-Building技術

Pin 屬性集