【问题标题】:Mystery HRESULT, 0x889000D神秘 HRESULT,0x889000D
【发布时间】:2010-11-12 22:17:57
【问题描述】:

十进制:143196173
十六进制:0x889000D

调用IAudioSessionControl2->GetProcessId()的结果。

GetLastError = 126*
Message = "找不到指定的模块"

我不确定如何解释这个错误。此外,我在任何地方都找不到 HRESULT 的描述。记录的返回码是 S_OK、E_POINTER、AUDCLNT_E_NO_SINGLE_PROCESS 和 AUDCLNT_E_DEVICE_INVALIDATED。

有人知道这段代码是什么意思吗?

*这是跨托管/非托管边界编组的错误,由 Marshal.GetLastError 获得,并带有提供消息的 Win32Exception。它可能是假的,但它是我所拥有的。 HRESULT 直接从非托管代码中拉出。


进一步调查,FAILED() 似乎并不认为这是一个错误。但是,out 参数被清除(设置为 0),这实际上没有任何意义。此外,GetErrorInfo 返回 S_FALSE;所以没有任何额外的调试信息可以继续。

【问题讨论】:

    标签: c++ winapi audio windows-7


    【解决方案1】:

    这是 AUDCLNT_S_NO_CURRENT_PROCESS - 我意识到它以某种方式错过了 Windows 7 SDK 标头为时已晚。

    SDK 文档将会更新以反映这一点。

    结果意味着会话是跨进程会话。返回的进程 ID 是创建会话的第一个进程的进程 ID,但如果你得到这个结果,你真的不能依赖进程 ID,因为进程 ID 不是唯一的。

    【讨论】:

    • 我看到一个进程 id 为 0 和这个错误代码,这与“第一个进程”位冲突。无论如何,我可以将其视为“保释”条件,需要做更多的工作。
    • 如果您看到进程 ID 为 0,则可能是 Windows 声音会话(您可以使用 IAudioSessionControl2->IsSystemSoundsSession() 来检查)。 Windows 声音会话永远不会有进程 ID。
    【解决方案2】:

    COM 方法可以在失败时设置 IErrorInfo。尝试检索它 - 它可以包含其他信息。在非托管代码中,您使用 GetErrorInfo()。

    【讨论】:

    • 不幸的是,音频 API 不使用 GetErrorInfo。
    猜你喜欢
    • 1970-01-01
    • 2014-06-05
    • 2013-03-11
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多