2009-07-22 63 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