다음을 통해 공유


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 열거형 값의 비트 OR 설정하여 컨텍스트를 제한할 수 있습니다. 또는 클라이언트는 CLSCTX_ALL 지정하여 컨텍스트 제한을 부과하지 않을 수 있습니다. CLSCTX대한 자세한 내용은 Windows SDK 설명서를 참조하세요.

[in] pActivationParams

NULL 설정하여 IAudioEndpointVolume, IAudioMeterInformation, IAudioSessionManager또는 오디오 엔드포인트 디바이스에서 IDeviceTopology 인터페이스를 활성화합니다. Windows 10 Build 20348부터 IAudioClient 활성화하는 호출자는 pActivationParamsAUDIOCLIENT_ACTIVATION_PARAMS 대한 포인터로 설정하여 프로세스 필터를 사용하여 루프백 모드에서 오디오 클라이언트를 구성할 수 있습니다.

IBaseFilter, IDirectSound, IDirectSound8, IDirectSoundCapture또는 디바이스의 IDirectSoundCapture8 인터페이스를 활성화하는 경우 호출자는 스트림 초기화 정보를 포함하는 PROPVARIANT 구조체에 대한 포인터를 지정할 수 있습니다. 자세한 내용은 비고를 참조하세요.

[out] ppInterface

메서드가 매개 변수 iid지정된 인터페이스의 주소를 쓰는 포인터 변수에 대한 포인터입니다. 이 메서드를 통해 호출자는 인터페이스에 대한 계산된 참조를 가져옵니다. 호출자는 인터페이스의 Release 메서드를 호출하여 더 이상 필요하지 않은 경우 인터페이스를 해제할 책임이 있습니다. 활성화 호출이 실패하면 *ppInterface NULL.

반환 값

메서드가 성공하면 S_OK 반환합니다. 실패할 경우 가능한 반환 코드는 다음 표에 표시된 값을 포함하지만 제한되지는 않습니다.

반환 코드 묘사
E_NOINTERFACE
개체는 요청된 인터페이스 형식을 지원하지 않습니다.
E_POINTER
매개 변수 ppInterface NULL.
E_INVALIDARG
pActivationParams 매개 변수는 지정된 인터페이스에 대해 NULL 합니다. 또는 pActivationParams를 잘못된 데이터를 가리킵니다.
E_OUTOFMEMORY
메모리 부족.
AUDCLNT_E_DEVICE_INVALIDATED
사용자가 오디오 엔드포인트 디바이스 또는 엔드포인트 디바이스가 연결하는 어댑터 디바이스를 제거했습니다.

발언

이 메서드는 iid 매개 변수로 지정된 인터페이스를 사용하여 COM 개체를 만듭니다. 이 메서드는 호출자가 CLSID를 매개 변수로 제공하지 않는다는 점을 제외하고 Windows CoCreateInstance 함수와 유사합니다. CoCreateInstance대한 자세한 내용은 Windows SDK 설명서를 참조하세요.

클라이언트는 특정 오디오 엔드포인트 디바이스에 대한 IMMDevice 인터페이스의 Activate 메서드를 호출하여 해당 디바이스의 인터페이스에 대한 계산된 참조를 가져올 수 있습니다. 이 메서드는 다음 인터페이스를 활성화할 수 있습니다.

인터페이스의 인터페이스 ID를 가져오려면 __uuidof 연산자를 사용합니다. 예를 들어 IAudioCaptureClient 인터페이스 ID는 다음과 같이 정의됩니다.

const IID IID_IAudioClient  __uuidof(IAudioCaptureClient)

__uuidof 운영자에 대한 자세한 내용은 Windows SDK 설명서를 참조하세요. IBaseFilter, IDirectSound, IDirectSound8, IDirectSoundCapture, IDirectSoundCapture8IMFTrustedOutput Windows SDK 설명서를 참조하세요.

pActivationParams 매개 변수는 활성화 호출에 대해 NULL IAudioEndpointVolume만들어야 합니다. IAudioMeterInformation, IAudioSessionManager또는 오디오 엔드포인트 디바이스에 대한 IDeviceTopology 인터페이스를 . Windows 10 Build 20348부터 IAudioClient 활성화하는 호출자는 pActivationParamsAUDIOCLIENT_ACTIVATION_PARAMS 대한 포인터로 설정하여 프로세스 필터를 사용하여 루프백 모드에서 오디오 클라이언트를 구성할 수 있습니다.

IBaseFilter, IDirectSound, IDirectSound8, IDirectSoundCapture또는 IDirectSoundCapture8 인터페이스를 만드는 활성화 호출의 경우 호출자는 옵션으로 pActivationParamsNULL 값을 지정할 수 있습니다. 이 경우 pActivationParams 스트림 초기화 정보를 포함하는 PROPVARIANT 구조를 가리킵니다. 구조체의 vt 멤버를 VT_BLOB 설정합니다. 오디오 세션 GUID 및 스트림 초기화 플래그가 포함된 DIRECTX_AUDIO_ACTIVATION_PARAMS 구조를 가리키도록 blob.pBlobData 멤버를 설정합니다. blob.cbSize 멤버를 sizeof(DIRECTX_AUDIO_ACTIVATION_PARAMS)로 설정합니다. 코드 예제는 DirectShow 애플리케이션대한 디바이스 역할을 참조하세요. PROPVARIANT대한 자세한 내용은 Windows SDK 설명서를 참조하세요.

IBaseFilter, IDirectSound, IDirectSound8, IDirectSoundCap Activate 메서드에서 만든 IDirectSoundCapture8 인터페이스 인스턴스를또는 오디오 엔드포인트 디바이스에서 스트림을 캡슐화합니다. 활성화 호출하는 동안 DirectSound 시스템 모듈은 IAudioClient::Initialize 메서드를 호출하여 스트림을 만듭니다. pActivationParams NULL경우 DirectSound는 DIRECTX_AUDIO_ACTIVATION_PARAMS 구조의 오디오 세션 GUID 및 스트림 초기화 플래그를 초기화 호출에 입력 매개 변수로 제공합니다. pActivationParams NULL경우 DirectSound는 Initialize 메서드의 AudioSessionGuidStreamFlags 매개 변수를 NULL 및 0을 해당 기본값으로 설정합니다. 이러한 값은 GUID_NULL 세션 GUID 값으로 식별되는 프로세스별 세션에 스트림을 할당하도록 메서드에 지시합니다.

활성화 렌더링 엔드포인트 디바이스에서만 IDirectSound 또는 IDirectSound8 인터페이스를 활성화할 수 있습니다. IDirectSoundCapture 활성화하거나 캡처 엔드포인트 디바이스에서만 IDirectSoundCapture8 인터페이스를 수 있습니다. 캡처 디바이스에서 IDirectSound 또는 IDirectSoundCapture8 인터페이스를 활성화하기 위한 활성화 호출 또는 렌더링 디바이스의 IDirectSoundCapture 또는 IDirectSoundCapture8 인터페이스가 실패하고 오류 코드 E_NOINTERFACE 반환합니다.

Windows 7에서 클라이언트는 IMMDevice::Activate 호출하고 IID_IMFTrustedOutput지정하여 OTA(출력 신뢰 기관) 개체를 만들고 개체의 IMFTrustedOutput 인터페이스에 대한 포인터를 검색할 수 있습니다. OTA는 Media Foundation의 PMP(보호된 미디어 경로) 내부 또는 외부에서 작동하고 Media Foundation 파이프라인 외부에 콘텐츠를 보낼 수 있습니다. 호출자가 PMP 외부에 있는 경우 OTA는 PMP에서 작동하지 않을 수 있으며 보호 설정은 덜 강력합니다. 오디오 및 예제 코드에 보호된 개체를 사용하는 방법에 대한 자세한 내용은 PUMA(Protected User Mode Audio)참조하세요.

보호된 개체 및 IMFTrustedOutput대한 일반적인 내용은 Media Foundation 설명서의 "보호된 미디어 경로"를 참조하세요.

참고 Xbox One 개발 키트(XDK) 타이틀에서 ISpatialAudioClient 인터페이스를 사용하는 경우 IMMDeviceEnumerator::EnumAudioEndpoints 또는 IMMDeviceEnumerator::GetDefaultAudioEndpoint호출하기 전에 먼저 EnableSpatialAudio 호출해야 합니다. 이렇게 하지 않으면 활성화 호출에서 E_NOINTERFACE 오류가 반환됩니다. EnableSpatialAudio XDK 타이틀에만 사용할 수 있으며 Xbox One에서 실행되는 유니버설 Windows 플랫폼 앱이나 Xbox One 이외의 장치에 대해서는 호출할 필요가 없습니다.
 
Activate 메서드를 호출하는 코드 예제는 다음 항목을 참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 mmdeviceapi.h

참고 항목

IAudioClient 인터페이스

IAudioEndpointVolume 인터페이스

IAudioMeterInformation 인터페이스

IAudioSessionManager 인터페이스

IDeviceTopology 인터페이스

IMMDevice 인터페이스