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
相关产品推荐
相关产品推荐

