媒体基金会使用 C 而不是 C++

2023-12-12

我正在学习使用 Microsoft 网站中显示的示例代码使用 Media Foundation API,使用 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 风格的接口。

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


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

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

C++ 风格在哪里

IMFActivate* pMfActivate = ...
IMFMediaSource* pMfMediaSource;
pMfActivate->ActivateObject(
    __uuidof(IMFMediaSource), (IUnknown**) &pMfMediaSource);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

媒体基金会使用 C 而不是 C++ 的相关文章

随机推荐

  • 如何使用个人 Microsoft 帐户通过 Azure AD 多租户应用程序访问 AzureRM?

    我的目标很简单 使用 Azure AD 多租户应用程序能够调用其他租户上的 Azure 资源管理器 API 但是 当您使用个人 Microsoft 帐户登录时 我不知道如何执行此操作 I created an Azure AD multi
  • 如何在 Django 中设置 PostgreSQL 数据库

    我是 Python 和 Django 新手 我正在使用 PostgreSQL 数据库引擎后端配置 Django 项目 但每个数据库操作都会出现错误 例如当我跑步时manage py syncdb 我越来越 C xampp htdocs dj
  • 为什么使用 register_shutdown_function() 时我的“关闭回调”无效?

    警告 register shutdown function 无效的关闭回调 trait ErrorTrait public function shutDownFunction error error get last fatal error
  • 将数组与条件合并

    我想合并具有特定条件的两个数组并更新它们包含的对象 首先是我的数组中的结构 struct Item var id Int var name String var value Int 两个数组的第二个元素 let fisrt Item id
  • 在 Web 服务器(flask、apache 和 wsgi)上写入文件时出现权限问题

    我正在尝试部署我的第一个网络应用程序 但我对此一无所知 这很有趣 但当我尝试解决问题时 我觉得我不知道自己在做什么 我在 digital ocean 上创建了一个在 ubuntu 18 04 上运行的服务器 在过去的 2 天里我一直在与它斗
  • 如何将 24 位整数转换为 3 字节数组?

    嘿 我完全超出了我的能力范围 我的大脑开始受伤 我需要转换一个整数 以便它适合 3 字节数组 这是一个 24 位 int 吗 然后再次返回以通过套接字从字节流发送 接收该数字 I have NSMutableData data NSMuta
  • 过滤器中的 Countif 1 和 -1

    我正在尝试计算过滤数据中的 1 和 1 1 的计数是正确的 但对于 1 它也包含 1 并且显示的计数不正确 如果你看一下所附的图片 1 的计数应该是 1 而不是显示 3 这意味着它也在计数 1 欲了解更多信息 请参阅图片 公式 SUMPRO
  • 反转 LinkedList 中的对象的问题

    我正在为一个作业编写代码 该作业需要一个在给定要反转的列表部分的情况下反转 LinkedList 中的元素的方法 例如 如果用户输入 3 该方法将反转数组中的前 3 个元素 我已经为其编写了代码 但它没有反转代码 而是简单地将第二个元素替换
  • 1/C# 中的 BigInteger

    我要实现 BigInteger ModPow 1 BigInteger 2 5 but 1 BigInteger总是回来0 这导致结果是0也 我试着寻找一些BigDecimalc 的类 但我什么也没找到 即使没有 有什么方法可以计算这个吗
  • OneDrive API Node.js - 无法使用 :/createUploadSession 内容范围错误

    我的问题是我无法上传大于 4MB 的文件 因此我根据以下内容使用了 createuploadsession创建上传会话 我成功从 createuploadsession 响应中获取 uploadUrl 值 现在我尝试使用此代码发出 PUT
  • r - 在 ggplot 中用一个 x 轴绘制两个图(3 个变量)

    我试图在一张图中绘制两个流量和一个降雨数据 我将其分为顶部和底部部分 如下图所示 在这里 我对这个情节有两个问题 花了很长时间但无法解决 为什么观察到的流量总是黑色的 即使我将其设置为蓝色 我是否不小心使用了其他一些参数来覆盖它 最重要的是
  • 为什么 const 数组无法从 constexpr 函数访问?

    我有一个名为 access 的 constexpr 函数 我想访问数组中的一个元素 char const const foo foo char const const bar 10 bar constexpr int access char
  • 如何在不存储的情况下将 Metro 应用程序部署到 Windows RT 设备 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我开发了一个地铁应用程序 仅供我的公司使用 所以我不会将其上传到 Windows 应用商
  • YFinance -tickerData.info 不适用于某些股票

    import yfinance as yf define the ticker symbol tickerSymbol AFT NZ get data on this ticker tickerData yf Ticker tickerSy
  • 查找两个字符串列表之间的差异

    我很确定这是重复的 但我已经尝试了一切 但我似乎仍然无法理解其中的差异 我有两个字符串列表 listA 和 listB 我正在尝试查找 listA 中不在 B 中的项目 例子 列表A 1 2 4 7 列表B 2 4 我想要的输出是 1 7
  • c -lz 库链接顺序(对符号“inflateInit2_”的未定义引用)

    我按此顺序链接 CodeBlocks 中的库 lz L usr local lib L usr local include pthread lswscale lavutil lavcodec lmp3lame lopus ltiff lvo
  • WPF - 动态资源与静态资源

    我在 WPF 项目中遇到了巨大的内存泄漏 并且正在尝试找出可以采取哪些措施来最大程度地减少它 为了访问资源 我 100 的时间都使用 StaticResource 我应该尽可能使用 DynamicResource 吗 StaticResou
  • 如何从sql server 2008中的日期获取该月的周数

    在microsoft sql server中的SQL语句中 有一个内置函数可以获取周数 但它是一年中的第几周 Select DatePart week 2012 11 30 returns 48 返回值48是一年中的周数 代替48 我想得到
  • UML 类图 - 使用枚举进行建模

    在 UML 类图中 我如何对导师可以在一周中工作多天而无需具体了解的情况进行建模 在我当前的解决方案中 1 名或多位导师每周工作 1 天或多天 由于导师工作的天数列表只是一个属性 并且似乎没有任何特定的结构来围绕它构建类 因此它应该是具有类
  • 媒体基金会使用 C 而不是 C++

    我正在学习使用 Microsoft 网站中显示的示例代码使用 Media Foundation API 使用 C 而不是 C 示例代码如下所示 HRESULT CreateVideoCaptureDevice IMFMediaSource