IMMDeviceEnumerator::GetDevice メソッド (mmdeviceapi.h)

GetDevice メソッドは、エンドポイント ID 文字列によって識別されるオーディオ エンドポイント デバイスを取得します。

構文

HRESULT GetDevice(
  [in]  LPCWSTR   pwstrId,
  [out] IMMDevice **ppDevice
);

Parameters

[in] pwstrId

エンドポイント ID を含む文字列へのポインター。 呼び出し元は通常、 IMMDevice::GetId メソッドまたは IMMNotificationClient インターフェイスのいずれかのメソッドからこの文字列を取得します。

Windows 11 バージョン 24H2 (ビルド 26100) 以降では、呼び出し元はオーディオ エンドポイントの PKEY_AudioEndpoint_StableId プロパティから取得した文字列を渡して、一致する StableId を持つオーディオ エンドポイントを取得することもできます。

[out] ppDevice

メソッドが指定したデバイスの IMMDevice インターフェイスのアドレスを書き込むポインター変数へのポインター。 このメソッドを使用して、呼び出し元はインターフェイスへのカウントされた参照を取得します。 呼び出し元は、インターフェイスの Release メソッドを呼び出すことによって、不要になったときにインターフェイスを 解放 する役割を担います。 GetDevice 呼び出しが失敗した場合、*ppDeviceNULL です

値を返す

成功した場合は S_OK を返します。 失敗した場合、可能なリターン コードには、次の表に示す値が含まれますが、これらに限定されません。

リターン コード Description
E_POINTER
パラメーター pwstrId または ppDeviceNULL です
E_NOTFOUND
デバイス ID は、このシステム内にあるオーディオ デバイスを識別しません。
E_OUTOFMEMORY
メモリ不足。

解説

2 つのプログラムが 2 つの異なるプロセスで実行されていて、両方が同じオーディオ エンドポイント デバイスにアクセスする必要がある場合、1 つのプログラムでデバイスの IMMDevice インターフェイスを他のプログラムに渡すことはできません。 ただし、プログラムは、次の手順に従って同じデバイスにアクセスできます。

  1. 最初のプログラムは、最初のプロセスで IMMDevice::GetId メソッドを呼び出して、デバイスを識別するエンドポイント ID 文字列を取得します。
  2. 最初のプログラムは、プロセス境界を越えてエンドポイント ID 文字列を 2 番目のプログラムに渡します。
  3. 2 番目のプロセスでデバイスの IMMDevice インターフェイスへの参照を取得するために、2 番目のプログラムはエンドポイント ID 文字列を使用して GetDevice を呼び出します。
GetDevice メソッドの詳細については、次のトピックを参照してください。 GetDevice メソッドを使用するコード例については、次のトピックを参照してください。

Requirements

要件 Value
サポートされる最小クライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
ターゲット プラットフォーム Windows
ヘッダー mmdeviceapi.h

こちらも参照ください

IMMDevice インターフェイス

IMMDevice::GetId

IMMDeviceEnumerator インターフェイス

IMMNotificationClient インターフェイス