Procedura: utilizzare platform invoke per riprodurre un file audio (Guida per programmatori C#)
Nell'esempio di codice C# riportato di seguito viene illustrato come utilizzare i servizi platform invoke per riprodurre un file audio wave nel sistema operativo Windows.
Esempio
In questo esempio di codice viene utilizzato DllImport per importare il punto di ingresso del metodo PlaySound di winmm.dll come Form1 PlaySound().L'esempio è costituito da un semplice Windows Form con un pulsante.Se si fa clic sul pulsante, viene visualizzata una finestra di dialogo OpenFileDialog standard di Windows che consente di aprire un file da riprodurre.Quando viene selezionato, il file wave viene riprodotto utilizzando il metodo PlaySound() del metodo dell'assembly winmm.DLL.Per ulteriori informazioni sul metodo PlaySound di winmm.dll, vedere Using the PlaySound function with Waveform-Audio Files.Cercare e selezionare un file con estensione wav, quindi scegliere Apri per riprodurre il file wave utilizzando platform invoke.Il percorso completo del file selezionato verrà visualizzato in una casella di testo.
La finestra di dialogo File aperti verrà filtrata in modo da visualizzare solo i file con estensione wav tramite le impostazioni di filtro:
dialog1.Filter = "Wav Files (*.wav)|*.wav";
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WinSound
{
public partial class Form1 : Form
{
private TextBox textBox1;
private Button button1;
public Form1() //constructor
{
InitializeComponent();
}
[System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError = true, CharSet = CharSet.Unicode, ThrowOnUnmappableChar = true)]
private static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags);
[System.Flags]
public enum PlaySoundFlags : int
{
SND_SYNC = 0x0000,
SND_ASYNC = 0x0001,
SND_NODEFAULT = 0x0002,
SND_LOOP = 0x0008,
SND_NOSTOP = 0x0010,
SND_NOWAIT = 0x00002000,
SND_FILENAME = 0x00020000,
SND_RESOURCE = 0x00040004
}
private void button1_Click (object sender, System.EventArgs e)
{
OpenFileDialog dialog1 = new OpenFileDialog();
dialog1.Title = "Browse to find sound file to play";
dialog1.InitialDirectory = @"c:\";
dialog1.Filter = "Wav Files (*.wav)|*.wav";
dialog1.FilterIndex = 2;
dialog1.RestoreDirectory = true;
if(dialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = dialog1.FileName;
PlaySound (dialog1.FileName, new System.IntPtr(), PlaySoundFlags.SND_SYNC);
}
}
}
}
Compilazione del codice
Per compilare il codice
Creare un nuovo progetto di applicazione Windows C# in Visual Studio e assegnare a tale progetto il nome WinSound.
Copiare il codice precedente e incollarlo sul contenuto del file Form1.cs.
Copiare il codice riportato di seguito e incollarlo nel file Form1.Designer.cs, nel metodo InitializeComponent(), dopo il codice esistente.
this.button1 = new System.Windows.Forms.Button(); this.textBox1 = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(192, 40); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(88, 24); this.button1.TabIndex = 0; this.button1.Text = "Browse"; this.button1.Click += new System.EventHandler(this.button1_Click); // // textBox1 // this.textBox1.Location = new System.Drawing.Point(8, 40); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(168, 20); this.textBox1.TabIndex = 1; this.textBox1.Text = "FIle path"; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.textBox1); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Platform Invoke WinSound C#"; this.ResumeLayout(false); this.PerformLayout();
Compilare il codice ed eseguirlo.
Sicurezza
Per ulteriori informazioni, .NET Framework Security (informazioni in lingua inglese).
Vedere anche
Riferimenti
Cenni preliminari sull'interoperabilità (Guida per programmatori C#)
Cenni preliminari sull'interoperabilità (Guida per programmatori C#)
Concetti
Informazioni dettagliate su platform invoke