ICreateDevEnum::CreateClassEnumerator 方法 (strmif.h)

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

CreateClassEnumerator 方法为指定的设备类别创建枚举器。

语法

HRESULT CreateClassEnumerator(
  [in]  REFCLSID     clsidDeviceClass,
  [out] IEnumMoniker **ppEnumMoniker,
  [in]  DWORD        dwFlags
);

参数

[in] clsidDeviceClass

指定设备类别 (CLSID) 的类标识符。 请参阅 筛选器类别

[out] ppEnumMoniker

接收指向 IEnumMoniker 接口的 指针。 调用方必须释放接口。

[in] dwFlags

零个或多个标志的按位组合。 如果为零,该方法将枚举类别中的每个筛选器。 如果设置了任何标志,则枚举仅包含与指定标志匹配的筛选器。 定义了以下标志:

标志 描述
CDEF_DEVMON_CMGR_DEVICE 使用音频压缩管理器 (ACM) 或视频压缩管理器 (VCM) 枚举音频或视频编解码器。
CDEF_DEVMON_DMO (DMO) 枚举 DirectX 媒体对象。
CDEF_DEVMON_FILTER 枚举本机 DirectShow 筛选器。
CDEF_DEVMON_PNP_DEVICE 枚举即插即用硬件设备。

返回值

返回以下 HRESULT 值之一。

返回代码 说明
S_OK
成功。
E_OUTOFMEMORY
内存不足。
S_FALSE
clsidDeviceClass 指定的类别不存在或为空。
E_POINTER
NULL 指针参数。

注解

如果类别不存在或为空,则返回值为S_FALSE, 并且 ppEnumMoniker 参数接收值 NULL。 因此,S_OK而不是使用 SUCCEEDED 宏测试返回值:

C++
IEnumMoniker *pEnum = NULL;
hr = pSysDevEnum->CreateClassEnumerator(
    CLSID_VideoCompressorCategory, &pEnum, 0);
if (hr == S_OK) 
{
    // Safe to dereference pEnum.
    pEnum->Release();
}
使用 IEnumMoniker 接口枚举表示设备类别中的筛选器的名字对象。 名字对象支持 IMoniker 接口。 CreateClassEnumerator 创建的名字对象还支持 IGetCapabilitiesKey 接口。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 strmif.h (包括 Dshow.h)
Library Strmiids.lib

另请参阅

错误和成功代码

ICreateDevEnum 接口