Media Foundation с использованием C вместо C ++

Я учусь использовать Media Foundation API из примера кода, показанного на веб-сайте Microsoft, используя C вместо C ++. Пример кода показан ниже.

HRESULT CreateVideoCaptureDevice(IMFMediaSource **ppSource)
{
    *ppSource = NULL;

    UINT32 count = 0;

    IMFAttributes *pConfig = NULL;
    IMFActivate **ppDevices = NULL;

    // Create an attribute store to hold the search criteria.
    HRESULT hr = MFCreateAttributes(&pConfig, 1);

    // Request video capture devices.
    if (SUCCEEDED(hr))
    {
        hr = pConfig->SetGUID(
            MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, 
            MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID
            );
    }

    // Enumerate the devices,
    if (SUCCEEDED(hr))
    {
        hr = MFEnumDeviceSources(pConfig, &ppDevices, &count);
    }

    // Create a media source for the first device in the list.
    if (SUCCEEDED(hr))
    {
        if (count > 0)
        {
            hr = ppDevices[0]->ActivateObject(IID_PPV_ARGS(ppSource));
        }
        else
        {
            hr = MF_E_NOT_FOUND;
        }
    }

    for (DWORD i = 0; i < count; i++)
    {
        ppDevices[i]->Release();
    }
    CoTaskMemFree(ppDevices);
    return hr;
}

Когда я пытался создать пример кода, я всегда получаю следующую ошибку:

ошибка C2039: «ActivateObject»: не является членом «IMFActivate» ошибка C2039: «выпуск»: не является членом «IMFActivate» ошибка C2039: «SetGUID»: не является членом «IMFAttributes»

Я изучил определения IMFActivate и IMFAttributes (в mfidl.h) и заметил, что у него интерфейс в стиле C.

Могу ли я узнать, может ли кто-нибудь показать пример использования интерфейса?

Ответы на вопрос(1)

Ваш ответ на вопрос