rust - Why does removing println! cause a Windows API function called through FFI to fail? -


if remove println! following code, waveoutprepareheader returns code mmsyserr_invalparam.

fn write_audio_block(device: &playbackdevice, block: &[u8]) {     use std::mem;     use std::{thread, time};     let mut header: mmsystem::wavehdr = unsafe { mem::uninitialized() };     header.dwbufferlength = block.len() winapi::minwindef::dword;     header.lpdata = block.as_ptr() winapi::winnt::lpstr;      println!("ptr: {:?}\nlength: {:?}", // removing causes error          header.lpdata,          header.dwbufferlength);      let header_size: winapi::minwindef::uint = mem::size_of::<mmsystem::wavehdr>() u32 +                                            header.dwbufferlength u32;      catch_errors(unsafe { winmm::waveoutprepareheader(device.handle, &mut header, header_size) });      catch_errors(unsafe { winmm::waveoutwrite(device.handle, &mut header, header_size) });      thread::sleep(time::duration::from_millis(100));      while unsafe { winmm::waveoutunprepareheader(device.handle, &mut header, header_size) } ==         mmsystem::waverr_stillplaying {         thread::sleep(time::duration::from_millis(10));     } } 

even adding println! or removing thread::sleep after waveoutwrite cause waveoutprepareheader return mmsyserr_invalparam.

otherwise works fine.


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -