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.
Могу ли я узнать, может ли кто-нибудь показать пример использования интерфейса?