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分!特着急,希望越快越好!
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分!特着急,希望越快越好!
[DllImport("winmm.dll", EntryPoint="waveOutOpen")]
public static extern int waveOutOpen (
ref int lphWaveOut,
int uDeviceID,
ref WAVEFORMAT lpFormat,
int dwCallback,
int dwInstance,
int dwFlags
);
[StructLayout(LayoutKind.Sequential)]
public struct WAVEFORMAT {
public int wFormatTag;
public int nChannels;
public int nSamplesPerSec;
public int nAvgBytesPerSec;
public int nBlockAlign;
}
打开录音回放设备 要实现你所说的功能,可能这个实现不了啊.一般用法:打开录音设备waveInOpen===>准备wave数据头waveInPrepareHeader===>
准备数据块waveInAddBuffer===>开始录音waveInStart===>停止录音(waveInReset) ===>
关闭录音设备(waveInClose)其实结构再复杂也没关系.只要把类和结构之间的关系搞清楚了就可以了.另外还要注意一下,转换成C#时使用到的数据类型.
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