You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DirectX项目配置MMDevice遇到类未注册错误及相关问题求助

1. WINAPI_FAMILY宏配置说明

  • 手动定义#define WINAPI_FAMILY WINAPI_FAMILY_GAMES不是该接口的标准启用方式,属于非正规的临时解决手段。
  • 标准配置只需要在代码最开头引入<mmdeviceapi.h>、<audioclient.h>头文件,同时在链接依赖中添加Mmdevapi.lib、Ole32.lib,相关枚举、UUID就会正常声明,无需修改WINAPI_FAMILY宏,手动修改该宏反而可能引发其他Win32 API的兼容问题,建议删除该宏定义。

2. 80040154报错原因与解决方案

该错误是COM初始化遗漏和API参数传反共同导致的,修复步骤如下:

2.1 启用COM初始化逻辑

COM组件调用前必须先初始化线程的COM环境,你当前注释掉了CoInitializeEx调用,直接取消这行代码的注释即可,注意要保证该行在所有COM相关操作前执行。

2.2 修正CoCreateInstance的参数顺序

CoCreateInstance第一个参数需要传入类ID(CLSID),第四个参数传入待获取的接口ID(IID),你当前的参数完全写反了,正确写法如下:

SUCCEEDING(CoCreateInstance(
    CLSID_MMDeviceEnumerator,
    NULL,
    CLSCTX_ALL, 
    IID_IMMDeviceEnumerator,
    (void**)&this->mmDeviceEnumerator));

你之前把接口ID作为类ID传入,系统无法找到对应的注册类,因此抛出类未注册错误。

2.3 补充资源释放逻辑

建议在AudioStream类的析构函数中,依次对所有创建的COM接口调用Release()方法,避免COM资源泄漏。

内容的提问来源于stack exchange,提问作者noahbkim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:36:02