C#FreeLibrary()ArithmeticException

时间:2014-02-10 12:56:26

标签: c# .net wpf visual-studio-2012 dll

我正在使用Visual Studio 2012和C#WPF应用程序。
我实际上是在尝试加载3个DLL然后卸载它们。我必须这样做,因为我不能添加这些DLL作为我的C#项目的参考 问题是我不断收到那些DLL的ArithmeticException。我需要所有这些,因为dll1需要dll2和dll3才能正常运行 我一步一步地执行了我的代码,这就是发生的事情:
我的LoadLibrary()确实找到了所有的DLL。一旦我进入FreeLibrary(),就没有错误,但在我的代码结束时(确切地说,当我离开MainWindow()时)我得到一个ArithmeticException。

我已经尝试将我的每个FreeLibrary()放在单独的if中,以查看其中一个是否未正确执行,但没有成功。
我还将我的每个FreeLibrary()放在while中以确保引用计数为0,但是我有另一件有趣的事情:我的应用程序锁定了我的最后一个Dll。它正确地执行第一个和第二个while,但是最后一个卡住了。我必须手动停止应用程序,并且我无法继续我的步骤,并且没有任何错误或线程堆栈上的任何内容。

这是我的代码:

  public partial class MainWindow : Window
  {
    [DllImport("kernel32.dll")]
    static extern IntPtr LoadLibrary(string dllToLoad);

    [DllImport("kernel32.dll")]
    static extern bool FreeLibrary(IntPtr hModule);

    public MainWindow()
    {
        InitializeComponent();
        try
        {
            string dll1Path = "dll/dll1.dll";
            string dll2Path = "dll/dll2.dll";
            string dll3Path = "dll/dll3.dll";

            IntPtr dll3Link = LoadLibrary(dll3Path);
            IntPtr dll2Link = LoadLibrary(dll2Path);
            IntPtr dll1Link = LoadLibrary(dll1Path);

            if(FreeLibrary(dll3Link) == true && FreeLibrary(dll2Link) == true && FreeLibrary(dll1Link) == true)
                 Console.WriteLine("All DLL have been unloaded");
            else
                 Console.WriteLine("One or more DLL were not unloaded properly");

            }
        catch (Exception ex)
        {
            Console.WriteLine("ERROR : " + ex.Message); 
        }

    }

}

2 个答案:

答案 0 :(得分:0)

你什么时候得到例外?

您可以致电File.Exists(dll1Path)检查您的DLL是否存在。也许这是你的问题

答案 1 :(得分:0)

对我来说,你的代码工作得很好。你在哪里dll / dll1.dll,你的bin / debug?