public extern static int waveOutOpen(ref IntPtr waveOutHandle, int deviceId, ref WaveFormatEx waveFormatEx, WaveOutDelegate callback, int userData, int flags);
public static extern MMRESULT waveOutOpen(out IntPtr hWaveOut, int uDeviceID, WaveFormat lpFormat, WaveOutDelegate dwCallback, uint dwInstance, uint dwFlags);
public static extern int waveInOpen(out IntPtr phwi, int uDeviceID, WaveFormat lpFormat, WaveOutDelegate dwCallback, int dwInstance, int dwFlags);
public static extern int Open( out IntPtr hWaveOut, int uDeviceID, [In, MarshalAs(UnmanagedType.LPStruct)] WaveFormatEx b, WaveOutDelegate dwCallback, // If using Function callback IntPtr dwCallbackInstance, WaveOpenFlags dwFlags);