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()
奇怪的是,唯一需要注意的输入参数是缓冲区描述(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 的任何原因?您可能会发现它们更可靠。