Procedura: utilizzare il richiamo piattaforma per riprodurre un file audio (Guida per programmatori C#)

Aggiornamento: novembre 2007

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 Utilizzo della funzione PlaySound con i file audio waveform. 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

  1. Creare un nuovo progetto di applicazione Windows C# in Visual Studio e assegnare a tale progetto il nome WinSound.

  2. Copiare il codice precedente e incollarlo sul contenuto del file Form1.cs.

  3. 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();
    
  4. Compilare il codice ed eseguirlo.

Sicurezza

Per ulteriori informazioni, .NET Framework Security (informazioni in lingua inglese).

Vedere anche

Attività

Esempio di tecnologia di richiamo piattaforma

Concetti

Guida per programmatori C#

Riferimenti

Cenni preliminari sull'interoperabilità (Guida per programmatori C#)

Altre risorse

Marshalling dei dati con richiamo piattaforma