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 以激活音频终结点设备上的 IAudioEndpointVolumeIAudioMeterInformationIAudioSessionManagerIDeviceTopology 接口。 从 Windows 10 内部版本 20348 开始,激活 IAudioClient 的调用方可以将 pActivationParams 设置为指向 AUDIOCLIENT_ACTIVATION_PARAMS 的指针,以便使用进程筛选器在环回模式下配置音频客户端。

激活 IBaseFilterIDirectSoundIDirectSound8IDirectSoundCapture或设备上的 IDirectSoundCapture8 接口时,调用方可以指定指向包含流初始化信息的 PROPVARIANT 结构的指针。 有关详细信息,请参阅“备注”。

[out] ppInterface

指向指针变量的指针变量,该方法将参数 iid指定的接口的地址写入其中。 通过此方法,调用方获取对接口的计数引用。 调用方负责通过调用接口的 Release 方法释放接口(如果不再需要)。 如果 激活 调用失败,*ppInterfaceNULL

返回值

如果方法成功,则返回S_OK。 如果失败,则可能的返回代码包括但不限于下表中显示的值。

返回代码 描述
E_NOINTERFACE
对象不支持请求的接口类型。
E_POINTER
参数 ppInterfaceNULL
E_INVALIDARG
pActivationParams 参数必须为指定接口 NULL;或 pActivationParams 指向无效数据。
E_OUTOFMEMORY
内存不足。
AUDCLNT_E_DEVICE_INVALIDATED
用户已删除音频终结点设备或终结点设备连接到的适配器设备。

言论

此方法使用由 iid 参数指定的接口创建 COM 对象。 该方法类似于 Windows CoCreateInstance 函数,但调用方不提供 CLSID 作为参数。 有关 CoCreateInstance的详细信息,请参阅 Windows SDK 文档。

客户端可以调用特定音频终结点设备的 IMMDevice 接口的 Activate 方法,以获取对该设备上接口的计数引用。 该方法可以激活以下接口:

若要获取接口的接口 ID,请使用 __uuidof 运算符。 例如,IAudioCaptureClient 的接口 ID 定义如下:

const IID IID_IAudioClient  __uuidof(IAudioCaptureClient)

有关 __uuidof 运算符的信息,请参阅 Windows SDK 文档。 有关 IBaseFilterIDirectSoundIDirectSound8IDirectSoundCaptureIDirectSoundCapture8IMFTrustedOutput,请参阅 Windows SDK 文档。

pActivationParams 参数应 NULL,以便 Activate 调用创建 IAudioEndpointVolumeIAudioMeterInformationIAudioSessionManager,或音频终结点设备的 IDeviceTopology 接口。 从 Windows 10 内部版本 20348 开始,激活 IAudioClient 的调用方可以将 pActivationParams 设置为指向 AUDIOCLIENT_ACTIVATION_PARAMS 的指针,以便使用进程筛选器在环回模式下配置音频客户端。

对于 激活 调用以创建 IBaseFilterIDirectSoundIDirectSound8IDirectSoundCaptureIDirectSoundCapture8 接口, 调用方可以指定 pActivationParams的非NULL 值。 在这种情况下,pActivationParams 指向包含流初始化信息的 PROPVARIANT 结构。 将结构的 vt 成员设置为VT_BLOB。 将 blob.pBlobData 成员设置为指向包含音频会话 GUID 和流初始化标志的 DIRECTX_AUDIO_ACTIVATION_PARAMS 结构。 将 blob.cbSize 成员设置为 sizeofDIRECTX_AUDIO_ACTIVATION_PARAMS)。 有关代码示例,请参阅 DirectShow 应用程序设备角色。 有关 PROPVARIANT的详细信息,请参阅 Windows SDK 文档。

IBaseFilterIDirectSoundIDirectSound8IDirectSoundCaptureIDirectSoundCapture8 接口实例,Activate 方法在音频终结点设备上封装流。 在 激活 调用期间,DirectSound 系统模块通过调用 IAudioClient::Initialize 方法创建流。 如果 pActivationParams 为非NULL,DirectSound 会将音频会话 GUID 和流初始化标志从 DIRECTX_AUDIO_ACTIVATION_PARAMS 结构作为输入参数提供给 Initialize 调用。 如果 pActivationParamsNULL,DirectSound 会将 Initialize 方法 的 audioSessionGuidStreamFlags 参数设置为各自的默认值,NULL 和 0。 这些值指示方法将流分配给由会话 GUID 值GUID_NULL标识的特定于进程的会话。

激活 只能在呈现终结点设备上激活 IDirectSoundIDirectSound8 接口。 它可以仅在捕获终结点设备上激活 IDirectSoundCaptureIDirectSoundCapture8 接口。 激活 调用,以在呈现设备上激活 IDirectSoundIDirectSoundCapture8 接口或 IDirectSoundCaptureIDirectSoundCapture8 接口失败并返回错误代码E_NOINTERFACE。

在 Windows 7 中,客户端可以调用 IMMDevice::Activate 并指定 IID_IMFTrustedOutput创建输出信任机构(OTA)对象并检索指向对象的 IMFTrustedOutput 接口的指针。 OTA 可以在媒体基金会的受保护媒体路径(PMP)内部或外部运行,并在媒体基础管道外部发送内容。 如果调用方在 PMP 外部,则 OTA 可能无法在 PMP 中运行,并且保护设置不太可靠。 有关将受保护的对象用于音频和示例代码的信息,请参阅 受保护的用户模式音频(PUMA)

有关受保护对象和 IMFTrustedOutput的一般信息,请参阅媒体基础文档中的“受保护的媒体路径”。

注意 在使用 Xbox One 开发工具包 (XDK) 游戏上的 ISpatialAudioClient 接口时, 必须先调用 enableSpatialAudio ,然后才能调用 IMMDeviceEnumerator::EnumAudioEndpointsIMMDeviceEnumerator::GetDefaultAudioEndpoint。 否则将导致从调用激活返回E_NOINTERFACE错误。 EnableSpatialAudio 仅适用于 XDK 游戏,无需为 Xbox One 上运行的通用 Windows 平台应用或任何非 Xbox One 设备调用。
 
有关调用 Activate 方法的代码示例,请参阅以下主题:

要求

要求 价值
最低支持的客户端 Windows Vista [仅限桌面应用]
支持的最低服务器 Windows Server 2008 [仅限桌面应用]
目标平台 窗户
标头 mmdeviceapi.h

另请参阅

IAudioClient 接口

IAudioEndpointVolume 接口

IAudioMeterInformation 接口

IAudioSessionManager 接口

IDeviceTopology 接口

IMMDevice 接口