Исключение блокировки загрузчика при воспроизведении аудио с использованием DirectX

#c# #.net #visual-studio #exception #directx

#c# #.net #visual-studio #исключение #directx

Вопрос:

Я пытаюсь воспроизвести аудиофайл с использованием библиотеки DLL DirectX.

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

Но обнаружено исключение блокировки загрузчика, как показано ниже:
Я не эксперт в анализе трассировки стека. Как проанализировать и решить проблему блокировки загрузчика?

Обнаружена блокировка загрузки

 Message: DLL 'C:WindowsassemblyGACMicrosoft.DirectX1.0.2902.0__31bf3856ad364e35Microsoft.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:WindowsassemblyGAC_32mscorlib2.0.0.0__b77a5c561934e089mscorlib.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'ToDoApp.vshost.exe' (Managed): Loaded 'C:WindowsassemblyGAC_MSILMicrosoft.VisualStudio.HostingProcess.Utilities9.0.0.0__b03f5f7f11d50a3aMicrosoft.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:WindowsassemblyGAC_MSILSystem.Windows.Forms2.0.0.0__b77a5c561934e089System.Windows.Forms.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'ToDoApp.vshost.exe' (Managed): Loaded 'C:WindowsassemblyGAC_MSILSystem2.0.0.0__b77a5c561934e089System.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'ToDoApp.vshost.exe' (Managed): Loaded 'C:WindowsassemblyGAC_MSILSystem.Drawing2.0.0.0__b03f5f7f11d50a3aSystem.Drawing.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'ToDoApp.vshost.exe' (Managed): Loaded 'C:WindowsassemblyGAC_MSILMicrosoft.VisualStudio.HostingProcess.Utilities.Sync9.0.0.0__b03f5f7f11d50a3aMicrosoft.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:WindowsassemblyGAC_MSILMicrosoft.VisualStudio.Debugger.Runtime9.0.0.0__b03f5f7f11d50a3aMicrosoft.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:ModulesToDoAppbinReleaseToDoApp.vshost.exe', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'ToDoApp.vshost.exe' (Managed): Loaded 'C:WindowsassemblyGACMicrosoft.DirectX.AudioVideoPlayback1.0.2902.0__31bf3856ad364e35Microsoft.DirectX.AudioVideoPlayback.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'ToDoApp.vshost.exe' (Managed): Loaded 'C:WindowsassemblyGAC_MSILSystem.Core3.5.0.0__b77a5c561934e089System.Core.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'ToDoApp.vshost.exe' (Managed): Loaded 'C:WindowsassemblyGAC_32System.Data2.0.0.0__b77a5c561934e089System.Data.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'ToDoApp.vshost.exe' (Managed): Loaded 'C:WindowsassemblyGAC_MSILSystem.Data.DataSetExtensions3.5.0.0__b77a5c561934e089System.Data.DataSetExtensions.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'ToDoApp.vshost.exe' (Managed): Loaded 'C:WindowsassemblyGAC_MSILSystem.Xml2.0.0.0__b77a5c561934e089System.Xml.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'ToDoApp.vshost.exe' (Managed): Loaded 'C:WindowsassemblyGAC_MSILSystem.Xml.Linq3.5.0.0__b77a5c561934e089System.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:ModulesToDoAppbinReleaseToDoApp.exe', Symbols loaded.
The thread 0x15a8 has exited with code 0 (0x0).
  

Редактировать:
Я попытался отключить исключение блокировки загрузчика. Это приводит к исчезновению исключения, но файл по-прежнему не воспроизводится.

Есть какие-нибудь подсказки?

Ответ №1:

По сути, текущая версия DirectX плохо сочетается с текущей версией Visual Studio.

DirectX 9.0c плохо работает с Visual Studio. Что вы можете сделать, так это вообще предотвратить выдачу исключения. Чтобы сделать это: щелкните Отладка-> Исключения… пункт меню, откройте пункт «Помощник по управляемой отладке» и снимите флажок рядом с надписью «LoaderLock».

На самом деле это спасало меня пару раз, хотя это не самый сложный подход. Лучшим подходом было бы использовать DirectX 10, но не у всех есть Vista и выше.

Комментарии:

1. Да, я сделал это несколько минут назад. Исключение больше не выдается, но файл снова не воспроизводится ..!!

2. Попробуйте это var audio = Audio.FromFile("C:sound1.mp3", false) \ The False sets autorun to false , а затем audio.Play() . Также убедитесь, что на это ссылаются Microsoft.DirectX.dll и Microsoft.DirectX.AudioVideoPlayback .

3. Также убедитесь, что установлено обновление SDK DirectX 9.0, без обновления SDK возникают проблемы с воспроизведением, поскольку громкость всегда установлена примерно на -100. Установите обновление и попробуйте установить громкость на 0.

4. Ok попробует это и сообщит вам. Спасибо 🙂

5. На самом деле это тема обсуждения в MSDN, которая помогла мне наладить воспроизведение, когда у меня возникла аналогичная проблема: social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread /…

Ответ №2:

LoaderLock Это известная ошибка с управляемым DirectX. Вы можете обойти это, отключив его в списке исключений Visual Studio в разделе Помощники по управляемой отладке.

Лучшим решением является переключение на поддерживаемую библиотеку DirectX, такую как SlimDX или XNA.