MMRESULT waveInOpen(
 LPHWAVEIN phwi, //输入设备句柄
 UINT uDeviceID, //输入设备ID
 LPWAVEFORMATEX pwfx, //录音格式指针
 DWORD dwCallback, //处理MM_WIM_***消息的回调函数或窗口句柄,线程ID
 DWORD dwCallbackInstance, 
 DWORD fdwOpen //处理消息方式的符号位
);MMRESULT waveOutWrite( 
HWAVEOUT hwo, 
LPWAVEHDR pwh, 
UINT cbwh 
); 用c#应该怎么写呢,在网上都没找到用c#相关的例子,可否指点一下参数在C#里的具体写法,谢谢

解决方案 »

  1.   

      [DllImport("winmm.dll")]   
    MMRESULT waveInOpen( 
    LPHWAVEIN phwi, //输入设备句柄 
    UINT uDeviceID, //输入设备ID 
    LPWAVEFORMATEX pwfx, //录音格式指针 
    DWORD dwCallback, //处理MM_WIM_***消息的回调函数或窗口句柄,线程ID 
    DWORD dwCallbackInstance, 
    DWORD fdwOpen //处理消息方式的符号位 
    ); 
      

  2.   

    [DllImport(mmdll)]
    public static extern int waveInOpen(out IntPtr phwi, int uDeviceID, WaveFormat lpFormat, WaveDelegate dwCallback, int dwInstance, int dwFlags);
      

  3.   

    private const string mmdll = "winmm.dll";
      

  4.   

    http://www.codeproject.com/cs/media/cswavrec.asp?df=100&forumid=16677&exp=0&select=1107344实际上,我个人建议你给你的vs装一个Pinvoke.net插件,通过这个插件,常用的C#下使用的api申明都可以直接找到
      

  5.   

    在用DllImport声明的时候记得要把函数的参数类型转换成C#中的类型就可以了
      

  6.   


    // WaveOut calls
    [DllImport(mmdll)]
    public static extern int waveOutGetNumDevs();
            [DllImport(mmdll)]
            public static extern int waveOutGetDevCaps(int hwo, ref WAVEOUTCAPS lpCaps, int uSize);
    [DllImport(mmdll)]
    public static extern int waveOutPrepareHeader(IntPtr hWaveOut, ref WaveHdr lpWaveOutHdr, int uSize);
    [DllImport(mmdll)]
    public static extern int waveOutUnprepareHeader(IntPtr hWaveOut, ref WaveHdr lpWaveOutHdr, int uSize);
    [DllImport(mmdll)]
    public static extern int waveOutWrite(IntPtr hWaveOut, ref WaveHdr lpWaveOutHdr, int uSize);
    [DllImport(mmdll)]
    public static extern int waveOutOpen(out IntPtr hWaveOut, int uDeviceID, WaveFormat lpFormat, WaveDelegate dwCallback, int dwInstance, int dwFlags);
    [DllImport(mmdll)]
    public static extern int waveOutReset(IntPtr hWaveOut);
    [DllImport(mmdll)]
    public static extern int waveOutClose(IntPtr hWaveOut);
    [DllImport(mmdll)]
    public static extern int waveOutPause(IntPtr hWaveOut);
    [DllImport(mmdll)]
    public static extern int waveOutRestart(IntPtr hWaveOut);
    [DllImport(mmdll)]
    //public static extern int waveOutGetPosition(IntPtr hWaveOut, out int lpInfo, int uSize);
            public static extern int waveOutGetPosition(IntPtr hWaveOut, out int time, int uSize);
    [DllImport(mmdll)]
    public static extern int waveOutSetVolume(IntPtr  hWaveOut, System .UInt32  dwVolume);
    [DllImport(mmdll)]
    public static extern int waveOutGetVolume(IntPtr  hWaveOut, out System .UInt32  dwVolume); // WaveIn calls
    [DllImport(mmdll)]
    public static extern int waveInGetNumDevs();
    [DllImport(mmdll)]
    public static extern int waveInAddBuffer(IntPtr hwi, ref WaveHdr pwh, int cbwh);
    [DllImport(mmdll)]
    public static extern int waveInClose(IntPtr hwi);
    [DllImport(mmdll)]
    public static extern int waveInOpen(out IntPtr phwi, int uDeviceID, WaveFormat lpFormat, WaveDelegate dwCallback, int dwInstance, int dwFlags);
    [DllImport(mmdll)]
    public static extern int waveInPrepareHeader(IntPtr hWaveIn, ref WaveHdr lpWaveInHdr, int uSize);
    [DllImport(mmdll)]
    public static extern int waveInUnprepareHeader(IntPtr hWaveIn, ref WaveHdr lpWaveInHdr, int uSize);
    [DllImport(mmdll)]
    public static extern int waveInReset(IntPtr hwi);
    [DllImport(mmdll)]
    public static extern int waveInStart(IntPtr hwi);
    [DllImport(mmdll)]
    public static extern int waveInStop(IntPtr hwi);
            [DllImport(mmdll)]
            public static extern int waveInGetDevCaps(int hwo,ref WAVEINCAPS lpCaps, int uSize);
    网上就有现成的例子
      

  7.   

    http://www.codeproject.com/KB/audio-video/cswavrec.aspx
      

  8.   

    wave API函数的引用很复杂,我把它封装成一个类,如果你需要的话,可以跟我联系.
      

  9.   

    http://www.codeproject.com/KB/audio-video/cswavrec.aspx
    》》这个东东有问题吧。 播放音频的时候 他把正在播放的数据 输出出来了 而不是 留一个接口 供外界调用输入播放的数据