IMMDevice::Activate 方法 (mmdeviceapi.h)
Activate 方法创建具有指定接口的 COM 对象。
语法
HRESULT Activate(
[in] REFIID iid,
[in] DWORD dwClsCtx,
[in] PROPVARIANT *pActivationParams,
[out] void **ppInterface
);
参数
[in] iid
接口标识符。 此参数是对 GUID 的引用,用于标识调用方请求激活的接口。 调用方将使用此接口与 COM 对象通信。 将此参数设置为以下接口标识符之一:
IID_IAudioClient
IID_IAudioEndpointVolume
IID_IAudioMeterInformation
IID_IAudioSessionManager
IID_IAudioSessionManager2
IID_IBaseFilter
IID_IDeviceTopology
IID_IDirectSound
IID_IDirectSound8
IID_IDirectSoundCapture
IID_IDirectSoundCapture8
IID_IMFTrustedOutput
IID_ISpatialAudioClient
IID_ISpatialAudioMetadataClient
有关详细信息,请参阅“备注”。
[in] dwClsCtx
在其中运行管理新创建对象的代码的执行上下文。 调用方可以通过将此参数设置为一 个或多个 CLSCTX 枚举值的按位 或 来限制上下文。 或者,客户端可以通过指定CLSCTX_ALL来避免施加任何上下文限制。 有关 CLSCTX的详细信息,请参阅 Windows SDK 文档。
[in] pActivationParams
设置为 NULL 以激活音频终结点设备上的 IAudioEndpointVolume、IAudioMeterInformation、IAudioSessionManager或 IDeviceTopology 接口。 从 Windows 10 内部版本 20348 开始,激活 IAudioClient 的调用方可以将 pActivationParams 设置为指向 AUDIOCLIENT_ACTIVATION_PARAMS 的指针,以便使用进程筛选器在环回模式下配置音频客户端。
激活 IBaseFilter、IDirectSound、IDirectSound8、IDirectSoundCapture或设备上的 IDirectSoundCapture8 接口时,调用方可以指定指向包含流初始化信息的 PROPVARIANT 结构的指针。 有关详细信息,请参阅“备注”。
[out] ppInterface
指向指针变量的指针变量,该方法将参数 iid指定的接口的地址写入其中。 通过此方法,调用方获取对接口的计数引用。 调用方负责通过调用接口的 Release 方法释放接口(如果不再需要)。 如果 激活 调用失败,*ppInterfaceNULL。
返回值
如果方法成功,则返回S_OK。 如果失败,则可能的返回代码包括但不限于下表中显示的值。
返回代码 | 描述 |
---|---|
|
对象不支持请求的接口类型。 |
|
参数 ppInterfaceNULL。 |
|
pActivationParams 参数必须为指定接口 NULL;或 pActivationParams 指向无效数据。 |
|
内存不足。 |
|
用户已删除音频终结点设备或终结点设备连接到的适配器设备。 |
言论
此方法使用由 iid 参数指定的接口创建 COM 对象。 该方法类似于 Windows CoCreateInstance 函数,但调用方不提供 CLSID 作为参数。 有关 CoCreateInstance的详细信息,请参阅 Windows SDK 文档。
客户端可以调用特定音频终结点设备的 IMMDevice 接口的 Activate 方法,以获取对该设备上接口的计数引用。 该方法可以激活以下接口:
- IAudioClient
- IAudioEndpointVolume
- IAudioMeterInformation
- IAudioSessionManager
- IAudioSessionManager2
- IBaseFilter
- IDeviceTopology
- IDirectSound
- IDirectSound8
- IDirectSoundCapture
- IDirectSoundCapture8
- IMFTrustedOutput
const IID IID_IAudioClient __uuidof(IAudioCaptureClient)
有关 __uuidof 运算符的信息,请参阅 Windows SDK 文档。 有关 IBaseFilter、IDirectSound、IDirectSound8、IDirectSoundCapture、IDirectSoundCapture8和 IMFTrustedOutput,请参阅 Windows SDK 文档。
pActivationParams 参数应 NULL,以便 Activate 调用创建 IAudioEndpointVolume, IAudioMeterInformation、IAudioSessionManager,或音频终结点设备的 IDeviceTopology 接口。 从 Windows 10 内部版本 20348 开始,激活 IAudioClient 的调用方可以将 pActivationParams 设置为指向 AUDIOCLIENT_ACTIVATION_PARAMS 的指针,以便使用进程筛选器在环回模式下配置音频客户端。
对于 激活 调用以创建 IBaseFilter、IDirectSound、IDirectSound8、IDirectSoundCapture或 IDirectSoundCapture8 接口, 调用方可以指定 pActivationParams的非NULL 值。 在这种情况下,pActivationParams 指向包含流初始化信息的 PROPVARIANT 结构。 将结构的 vt 成员设置为VT_BLOB。 将 blob.pBlobData 成员设置为指向包含音频会话 GUID 和流初始化标志的 DIRECTX_AUDIO_ACTIVATION_PARAMS 结构。 将 blob.cbSize 成员设置为 sizeof(DIRECTX_AUDIO_ACTIVATION_PARAMS)。 有关代码示例,请参阅 DirectShow 应用程序
IBaseFilter、IDirectSound、IDirectSound8、IDirectSoundCapture或 IDirectSoundCapture8 接口实例,Activate 方法在音频终结点设备上封装流。 在 激活 调用期间,DirectSound 系统模块通过调用 IAudioClient::Initialize 方法创建流。 如果 pActivationParams 为非NULL,DirectSound 会将音频会话 GUID 和流初始化标志从 DIRECTX_AUDIO_ACTIVATION_PARAMS 结构作为输入参数提供给 Initialize 调用。 如果 pActivationParamsNULL,DirectSound 会将 Initialize 方法 的 audioSessionGuid 和 StreamFlags 参数设置为各自的默认值,NULL 和 0。 这些值指示方法将流分配给由会话 GUID 值GUID_NULL标识的特定于进程的会话。
激活 只能在呈现终结点设备上激活 IDirectSound 或 IDirectSound8 接口。 它可以仅在捕获终结点设备上激活 IDirectSoundCapture 或 IDirectSoundCapture8 接口。 激活 调用,以在呈现设备上激活 IDirectSound 或 IDirectSoundCapture8 接口或 IDirectSoundCapture 或 IDirectSoundCapture8 接口失败并返回错误代码E_NOINTERFACE。
在 Windows 7 中,客户端可以调用 IMMDevice::Activate 并指定 IID_IMFTrustedOutput创建输出信任机构(OTA)对象并检索指向对象的 IMFTrustedOutput 接口的指针。 OTA 可以在媒体基金会的受保护媒体路径(PMP)内部或外部运行,并在媒体基础管道外部发送内容。 如果调用方在 PMP 外部,则 OTA 可能无法在 PMP 中运行,并且保护设置不太可靠。 有关将受保护的对象用于音频和示例代码的信息,请参阅 受保护的用户模式音频(PUMA)。
有关受保护对象和 IMFTrustedOutput的一般信息,请参阅媒体基础文档中的“受保护的媒体路径”。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista [仅限桌面应用] |
支持的最低服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | mmdeviceapi.h |