在Visual Studio中不起作用,但在.exe中起作用

时间:2015-10-27 09:39:06

标签: c# .net visual-studio

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

我正在使用Visual Studio Professional 2013版本12.0.3.1101.00 Update 4

我很确定这是一个Visual Studio设置问题。它只是在我经历过的一些Visual Studio安装中,在其他安装中这个代码工作正常。

   (setq url-using-proxy t)
   (setq url-proxy-services
       '(("no_proxy" . "^\\(localhost\\|10.*\\)")
         ("http" . "proxy.address.company:port")
         ("https" . "proxy.address.company:port")
         ("ftp" . "proxy.address.company:port")))

waveOutGetNumDevs()函数在从visual Studio运行时抛出异常,但如果我将其作为.exe运行则返回正确的值。 如果我在调试模式或发布模式下运行并不重要。两者都失败了

我得到的例外是:

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();
    }
}

另一个观察,这取决于我正在使用的.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 问题仍然存在。

1 个答案:

答案 0 :(得分:0)

这种方式适用于我,在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();
        }
    }
}

<强> Program.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。

祝你好运(° - °)