2009-07-22 6 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 인 경우 Windows 세션이 소리를냅니다 (IAudioSessionControl2-> IsSystemSoundsSession()을 사용하여 확인할 수 있음). 창 소리 세션에는 프로세스 ID가 없습니다. –

-1

COM 메서드는 실패시 IErrorInfo를 설정할 수 있습니다. 검색을 시도하십시오 - 추가 정보를 포함 할 수 있습니다. 관리되지 않는 코드에서는 GetErrorInfo()를 사용합니다.

+0

오디오 API는 불행히도 GetErrorInfo를 사용하지 않습니다. –