不能在Visual studio中使用,但可以作为.exe使用

本文关键字:但可以 exe 使用 Visual studio 不能 | 更新日期: 2023-09-27 18:19:28

我的Visual Studio有问题。当使用Visual Studio运行时,我的代码会崩溃,但如果我将其编译并作为exe运行,则可以正常工作。

我使用的是Visual Studio Professional 2013版本12.0.3.1101.00更新4

我确信这是Visual Studio设置的问题。这只是我在一些Visual Studio安装中体验过的,在其他安装中,此代码运行良好。

class Program
{
    [DllImport("winmm.dll")]
    public static extern int waveOutGetNumDevs();
    static void Main(string[] args)
    {
        try
        {
            int numOfDevices = waveOutGetNumDevs(); //<--- throws SEHException 
            Console.WriteLine("Number Of Audio Out Devices: " + numOfDevices);
        }
        catch (Exception exception)
        {
            Console.WriteLine("Error: " + exception.ToString());
        }
        Console.ReadLine();
    }
}

当我从visual Studio运行waveOutGetNumDevs()函数时,它会抛出一个异常,但如果我将其作为.exe运行,它会返回正确的值。无论我是在调试模式还是发布模式下运行都无关紧要。两者都失败了。

我得到的例外是:

System.Runtime.InteropServices.SEHException occurred
  _HResult=-2147467259
  _message=An external component has thrown an exception.
  HResult=-2147467259
  IsTransient=false
  Message=An external component has thrown an exception.
  ErrorCode=-2147467259
  InnerException: 

另一个观察结果是,这取决于我使用的.net版本。如果我使用的是.NET 2.0,它实际上可以正常工作,但如果我使用.NET 4.0,它会失败。

我的目标是在.NET 4.0(稍后在.NET 4.5中)中运行代码

编辑1:

HEX中的错误代码和HResult为:0x80004005

编辑2:

我现在已升级到Visual Studio 2013版本12.0.40629.00更新5这个问题仍然存在。

不能在Visual studio中使用,但可以作为.exe使用

在Visual Studio 2012和.Net Framework 4.5.1中,这种方式对我很有效:

Player.cs

class Player
{
    [DllImport("winmm.dll")]
    private static extern uint waveOutGetNumDevs();
    public uint GetNumDevs
    {
        get
        {
            return waveOutGetNumDevs();
        }
    }
}

程序.cs

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Player player = new Player();
            uint numOfDevices = player.GetNumDevs;
            Console.WriteLine("Number Of Audio Out Devices: " + numOfDevices);
        }
        catch (Exception exception)
        {
            Console.WriteLine("Error: " + exception.ToString());
        }
        Console.ReadLine();
    }
}

注意,我正在使用一个属性来调用该方法,返回值的类型是UINT,这里是文档:waveOutGetNumDevs。

如果仍然无法工作,请考虑重新安装VS2013。

祝你好运(°-°)

相关文章: