2009-07-22 10 views
0

進:143196173
六角:0x889000D IAudioSessionControl2->GetProcessId()への呼び出しからミステリーHRESULT、0x889000D

結果。

のGetLastError = 126 *
メッセージ=私はこのエラーをどのように解釈するか本当にわからないんだけど

「指定されたモジュールが見つかりませんでした」。さらに、私はHRESULTの説明をどこにも見つけることができません。文書化された戻りコードは、S_OK、E_POINTER、AUDCLNT_E_NO_SINGLE_PROCESS、およびAUDCLNT_E_DEVICE_INVALIDATEDです。

誰でもこのコードの意味を理解していますか?

*これは、Marshal.GetLastErrorによって取得されたWin32Exceptionでメッセージを提供して管理下/非管理境界全体にマーシャリングされたエラーです。それは偽物かもしれないが、私はそれを持っている。 HRESULTはアンマネージコードから直接引き出されます。


詳しい調査の結果、FAILED()が、これは誤りであると考えていないようです。しかし、outパラメータはクリアされ(0に設定されます)、実際には意味をなさないでしょう。また、GetErrorInfoはS_FALSEを返します。そのため、追加のデバッグ情報はありません。

答えて

4

これはAUDCLNT_S_NO_CURRENT_PROCESSです - 私はそれが何とかWindows 7 SDKヘッダーが遅すぎることに気付きました。

これを反映するために、SDKのドキュメントが更新されます。

結果は、セッションがクロスプロセスセッションであることを意味します。返されるプロセスIDは、セッションを作成した最初のプロセスのプロセスIDですが、この結果が得られた場合、プロセスIDが一意ではないため、実際にプロセスIDに依存することはできません。

+0

"最初のプロセス"ビットと競合するこのエラーコードと一緒に、プロセスIDが0で表示されています。それにもかかわらず、私はちょうどもう少しの仕事でこれを「保釈」状態として扱うことができます。 –

+2

プロセスIDが0の場合は、ウィンドウがセッションを鳴らしている可能性があります(IAudioSessionControl2-> IsSystemSoundsSession()を使用して確認できます)。ウィンドウのセッションセッションIDは決してありません。 –

-1

COMメソッドは、失敗した場合にIErrorInfoを設定できます。それを取得しようとする - それは追加情報を含むことができます。アンマネージコードでは、GetErrorInfo()を使用します。

+0

残念ながら、オーディオAPIでGetErrorInfoは使用されません。 –

関連する問題