首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# FreeLibrary() ArithmeticException

C# FreeLibrary() ArithmeticException
EN

Stack Overflow用户
提问于 2014-02-10 20:56:26
回答 2查看 416关注 0票数 0

我使用的是Visual Studio2012和一个C# WPF应用程序。

实际上,我正在尝试加载3个DLL,然后卸载它们。我必须这样做,因为我不能将这些DLL作为引用添加到我的C#项目中。

问题是我一直在用这些DLL得到一个ArithmeticException。我需要所有这些,因为dll1需要dll2和dll3才能正常运行。

我已经一步一步地执行了我的代码,下面是发生的事情:

我的LoadLibrary()确实找到了所有的DLL。一旦我到达FreeLibrary(),就没有错误了,但是在我的代码末尾(确切地说,是在MainWindow()结束时),我得到了一个ArithmeticException。

我已经尝试将我的每个FreeLibrary()放在单独的if中,看看其中是否有一个没有正确执行,但没有成功。

我还将我的每个FreeLibrary()放在一个while中,以确保引用计数为0,但在这里我有了另一件有趣的事情:我的应用程序锁定了我的最后一个Dll。它正确地执行了第一个和第二个while,但坚持使用最后一个。我必须手动停止应用程序,并且我不能一步一步地继续我的工作,并且线程堆栈上没有任何错误或其他任何东西。

下面是我的代码:

代码语言:javascript
复制
  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); 
        }

    }

}
EN

回答 2

Stack Overflow用户

发布于 2014-02-10 21:09:42

在什么情况下会出现异常?

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

票数 0
EN

Stack Overflow用户

发布于 2014-02-10 21:12:47

对我来说,你的代码运行得很好。dll/dll1.dll在哪里,它们在bin/debug中吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21677867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档