NAudio 在 x86 代码上崩溃

本文关键字:崩溃 代码 x86 NAudio | 更新日期: 2023-09-27 17:56:41

就像在主题中一样,AnyCPU一切正常,但是当我更改为x86 ->应用程序崩溃时。我在 Win 7 x64 下工作。

编辑:

(Exception from HRESULT: 0x80070057 (E_INVALIDARG))"}  

叠:

   at System.StubHelpers.InterfaceMarshaler.ConvertToManaged(IntPtr pUnk, IntPtr itfMT, IntPtr classMT, Int32 flags)  
   at NAudio.Wave.DirectSoundOut.IDirectSound.CreateSoundBuffer(BufferDescription desc, Object& dsDSoundBuffer, IntPtr pUnkOuter)  
   at NAudio.Wave.DirectSoundOut.InitializeDirectSound()  
   at NAudio.Wave.DirectSoundOut.PlaybackThreadFunc()  
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)  
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)  
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)  
   at System.Threading.ThreadHelper.ThreadStart()

NAudio 在 x86 代码上崩溃

奇怪的是,唯一需要注意的输入参数是缓冲区描述(DSBUFFERDESC 的实例),但我看不到 NAudio 互操作的任何 x64/x86 问题。您的设备可能不支持某些辅助缓冲区标志:

bufferDesc2.dwFlags = DirectSoundBufferCaps.DSBCAPS_GETCURRENTPOSITION2
    | DirectSoundBufferCaps.DSBCAPS_CTRLPOSITIONNOTIFY
    | DirectSoundBufferCaps.DSBCAPS_GLOBALFOCUS
    | DirectSoundBufferCaps.DSBCAPS_CTRLVOLUME
    | DirectSoundBufferCaps.DSBCAPS_STICKYFOCUS;

堆栈跟踪的另一个奇怪之处在于错误在 ConvertToManaged 中,这表明是声音缓冲区转换为托管对象出错了,但我想不出为什么会发生这种情况,因为我们在调用CreateSoundBuffer完成之前不会尝试投射到 IDirectSoundBuffer

您的应用程序不能改用 WaveOut 或 WaveOutEvent 的任何原因?您可能会发现它们更可靠。