2009-07-22 25 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文檔將被更新以反映這一點。

結果意味着會話是跨進程會話。返回的進程標識是創建會話的第一個進程的進程標識,但是如果得到此結果,由於進程標識不是唯一的,您實際上不能依賴進程標識。

+0

我看到與此錯誤代碼結合的進程ID爲0,與「第一個進程」位有什麼衝突。無論如何,我可以將此視爲一種「保釋」狀態,並有更多的工作。 – 2009-07-26 05:20:07

+2

如果您看到進程ID爲0,則可能是Windows聲音會話(您可以使用IAudioSessionControl2-> IsSystemSoundsSession()來檢查)。 Windows聲音會話永遠不會有進程ID。 – 2009-07-26 06:11:02

-1

COM方法可以在失敗時設置IErrorInfo。嘗試檢索它 - 它可以包含其他信息。在非託管代碼中,您使用GetErrorInfo()。

+0

不幸的是,音頻API不使用GetErrorInfo。 – 2009-07-25 21:53:44