C#下如何使用win32库? 200分在system32下有个库winmm.dll,其中的函数原型如下:(见帮助)
waveOutOpen
The waveOutOpen function opens the given waveform-audio output device for playback.MMRESULT waveOutOpen(
  LPHWAVEOUT     phwo,      
  UINT_PTR       uDeviceID, 
  LPWAVEFORMATEX pwfx,      
  DWORD_PTR      dwCallback,
  DWORD_PTR      dwCallbackInstance,
  DWORD          fdwOpen    
);
本人想使用此函数,程序如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.IO;
using System.Runtime.InteropServices;
using System.Xml;namespace WavePlayer
{
/// <summary>
/// //wave数据播放器,能播放wave数据和文件
/// </summary>
public class Player
{
//[DllImport("winmm.dll", EntryPoint="sndPlaySoundA")]
//public static extern long sndPlaySound(String SoundName, long Flags);
[DllImport("winmm.dll", EntryPoint="waveOutOpen")]
public static extern long waveOutOpen();              //问题在此: 参数怎么声明??? public string waveFileName;
public Player()
{
// 
// TODO: 在此处添加构造函数逻辑
//
}
public void SetData()
{ } public void Open()
{
waveOutOpen();   //  
} }
}问题是这个函数中包含很复杂的结构,怎么声明啊?给个详细的例子,一定另外再奉送100分!特着急,希望越快越好!

解决方案 »

  1.   

    你可以这样声明:
    [DllImport("winmm.dll", EntryPoint="waveOutOpen")]
    public static extern int waveOutOpen (
    ref int lphWaveOut,
    int uDeviceID,
    ref WAVEFORMAT lpFormat,
    int dwCallback,
    int dwInstance,
    int dwFlags
    );
      

  2.   

    WAVEFORMAT的声明:
    [StructLayout(LayoutKind.Sequential)]
    public struct WAVEFORMAT {
    public int wFormatTag;
    public int nChannels;
    public int nSamplesPerSec;
    public int nAvgBytesPerSec;
    public int nBlockAlign;
    }
      

  3.   

    qiuji(忆秋季) 兄弟,你能帮我做个简单的例子好吗?就是可以调用播放的例子,如果简单的话可以对播放进行简单的控制,如暂停,快进等。可以的话发到
      

  4.   

    MMRESULT waveOutOpen
    打开录音回放设备  要实现你所说的功能,可能这个实现不了啊.一般用法:打开录音设备waveInOpen===>准备wave数据头waveInPrepareHeader===>
    准备数据块waveInAddBuffer===>开始录音waveInStart===>停止录音(waveInReset) ===>
    关闭录音设备(waveInClose)其实结构再复杂也没关系.只要把类和结构之间的关系搞清楚了就可以了.另外还要注意一下,转换成C#时使用到的数据类型.
      

  5.   

    你可以参考一下这篇文章:
    A full-duplex audio player in C# using the waveIn/waveOut APIs
    http://www.codeproject.com/cs/media/cswavrec.asp?df=100&forumid=16677&exp=0&select=1107344
      

  6.   

    http://www.codeproject.com/audio/wave_class_for_playing_and_recording.asp也看一下这个,就可以控件播放暂停等.
      

  7.   

    sxlfybb(追猪星) 我知道 waveout有一套函数,都不知道怎么用,难道这些函数不是用来播放wave数据用的吗?你有现成的例子吗?有的话给我发一下好吗?