gpt4 book ai didi

c - Media Foundation 使用 C 而不是 C++

转载 作者:太空宇宙 更新时间:2023-11-04 08:41:10 25 4
gpt4 key购买 nike

我正在学习使用 C 而不是 C++ 的 Microsoft 网站上显示的示例代码来使用 Media Foundation API。示例代码如下所示。

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 风格的接口(interface)。

我可以知道是否有人可以展示如何使用该界面的示例吗?

最佳答案

您应该使用定义为“C 风格”的 COM 接口(interface),使用虚拟方法表指针:

IMFActivate* pMfActivate = ...
IMFMediaSource* pMfMediaSource;
pMfActivate->lpVtbl->ActivateObject(
pMfActivate, &IID_IMFMediaSource, (IUnknown**) &pMfMediaSource);

C++风格在哪里

IMFActivate* pMfActivate = ...
IMFMediaSource* pMfMediaSource;
pMfActivate->ActivateObject(
__uuidof(IMFMediaSource), (IUnknown**) &pMfMediaSource);

关于c - Media Foundation 使用 C 而不是 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23514232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com