0

就像在主题中一样,一切正常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()
4

1 回答 1

1

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

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

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

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

于 2013-01-30T11:20:49.480 回答