2011-04-13 4 views
5

DirectX dll을 사용하여 오디오 파일을 재생하려고합니다.로더 잠금 DirectX를 사용하여 오디오를 재생하는 동안 예외가 발생했습니다.

Audio.FromFile("Message 1.mp3").Play(); 

그러나 아래 그림과 같이 로더 잠금 예외가 감지 : 나는 스택 추적을 분석의 전문가가 아닙니다. 로더 잠금 문제를 분석하고 해결하는 방법은 무엇입니까?

LoaderLock은

Message: DLL 'C:\Windows\assembly\GAC\Microsoft.DirectX\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.dll' is attempting managed execution inside OS Loader lock. 
Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang. 

스택 추적 감지되었습니다 :

'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\9.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\9.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\9.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'E:\Modules\ToDoApp\bin\Release\ToDoApp.vshost.exe', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC\Microsoft.DirectX.AudioVideoPlayback\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.AudioVideoPlayback.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System.Core\3.5.0.0__b77a5c561934e089\System.Core.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System.Data.DataSetExtensions\3.5.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089\System.Xml.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ToDoApp.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System.Xml.Linq\3.5.0.0__b77a5c561934e089\System.Xml.Linq.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
The thread 0x127c has exited with code 0 (0x0). 
The thread 0x210 has exited with code 0 (0x0). 
'ToDoApp.vshost.exe' (Managed): Loaded 'E:\Modules\ToDoApp\bin\Release\ToDoApp.exe', Symbols loaded. 
The thread 0x15a8 has exited with code 0 (0x0). 

편집 : 내가 로더 잠금 예외를 해제했습니다. 예외가 사라지지만 여전히 파일이 재생되지 않습니다.

힌트가 있습니까?

답변

5

기본적으로 DirectX의 현재 버전은 현재 버전의 Visual Studio에서 제대로 재생되지 않습니다.

DirectX 9.0c는 Visual Studio에서 제대로 재생되지 않습니다. 당신이 할 수있는 것은 예외가 전혀 던져지지 않도록하는 것입니다. 디버그 -> 예외 ... 메뉴 항목을 클릭하고 "관리 디버깅 도우미"항목을 연 다음 "LoaderLock"레이블 옆의 상자를 선택 취소하십시오.

이것은 실제로 가장 정교한 접근 방법은 아니지만 실제로 두어 번에 저를 저장했습니다. 더 나은 방법은 DirectX 10을 사용하는 것이지만 모든 사람이 Vista 이상을 사용하는 것은 아닙니다.

+0

네, 몇 분 전 돌아 왔습니다. 예외는 더 이상 발생하지 않지만 다시 파일이 재생되지 않습니다 .. !! – Marshal

+0

이것을보십시오'var audio = Audio.FromFile ("C : \ sound1.mp3", false) \\ 거짓은 자동 실행을 거짓으로 설정 한 다음에'audio.Play()'로 설정합니다. 또한'Microsoft.DirectX.dll'과'Microsoft.DirectX.AudioVideoPlayback'이 참조되는지 확인하십시오. –

+0

또한 SDK 업데이트없이 DirectX 9.0 SDK 업데이트가 설치되어 있는지 확인하십시오. 볼륨이 항상 -100과 같이 설정되어 있기 때문에 재생에 문제가 있습니다. 업데이트를 설치하고 볼륨을 0으로 설정하십시오. –

3

LoaderLock은 Managed DirectX의 알려진 버그입니다. 이 문제를 해결하려면 관리되는 디버깅 도우미에서 disabling it in the Visual Studio exceptions list을 사용할 수 있습니다.

더 나은 해결 방법은 SlimDX 또는 XNA와 같이 지원되는 DirectX 라이브러리로 전환하는 것입니다.

관련 문제