Visual Studio 2013 Express 中的错误 13:输出名称

Error 13 in Visual Studio 2013 Express: output name

所以我正在尝试构建一个媒体播放器,并且正在关注 YouTube 上的教程。
我按照教程输入了代码 1 for 1,所有名称 'output' 的实例都给出了错误 13。我添加了 NAudio 1.6.3 dll 作为 well.Maybe 我得到了错误的版本?

这是 YouTube 视频的link...C# Audio Tutorial 1 - Wave File with NAudio

这是我的代码...

    using System;
using System.Windows.Forms;

namespace Naudio_Tutorial
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private NAudio.Wave.WaveFileReader wave = null;

        private NAudio.Wave.DirectSoundOut wave = null;

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "Wave File (*.wav)|*.wav;";
            if (open.ShowDialog() != DialogResult.OK) return;


            DisposeWave();

            wave = new NAudio.Wave.WaveFileReader(open.FileName);
            Output = new NAudio.Wave.DirectSoundOut();
            Output.Init(new NAudio.Wave.WaveChannel32(wave));
            Output.Play();

            pauseButton.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (output != null)
            {
                if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Pause();
                else if (output.PlaybackState == NAudio.Wave.PlaybackState.Paused) output.Play();

            }
        }

        private void DisposeWave()
        {
            if (output != null)
            {
                if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Stop();
                output.Dispose();
                output = null;
            }
            if (wave != null)
            {
                wave.Dispose();
                wave = null;
            }
        }
        private void Form1_Closing(object sender, FormClosingEventArgs e)
        {
            DisposeWave();
        }
    }
}

您还没有申报Output。如果您打算在此方法中仅在本地使用 Output,请添加 var 关键字

var Output = new NAudio.Wave.DirectSoundOut();

如果您以后需要访问它(这似乎是您的情况),或者将 Output 声明为字段:

public partial class Form1 : Form
{
    private NAudio.Wave.DirectSoundOut output;

    ...
}

另请注意,C# 区分大小写。要么写 output 要么 Output 但不要混合这两种变体。在 C# 中,camelCase 优先用于字段、方法参数和局部变量;类型名称、属性和方法首选 PascalCase。

这是你的问题:

private NAudio.Wave.DirectSoundOut wave = null;

应该是:

private NAudio.Wave.DirectSoundOut Output = null;

我注意到的第一件事是您声明了两个具有相同名称的不同对象。 根据我的经验,应用程序甚至不应该编译,因为这会产生冲突。

这一行:

private NAudio.Wave.DirectSoundOut wave = null;

应改为:

private NAudio.Wave.DirectSoundOut output = null;

编译器会报错,因为您正试图访问一个尚未声明的对象。 以下将导致异常,例如您所描述的异常:

Output = new NAudio.Wave.DirectSoundOut();
Output.Init(new NAudio.Wave.WaveChannel32(wave));  
Output.Play();

此外,只是一个小费。错误 13 的描述性不够。包括整个错误消息和堆栈跟踪将帮助其他人帮助您。

Error 13 - ERROR_INVALID_DATA