我使用的是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,但坚持使用最后一个。我必须手动停止应用程序,并且我不能一步一步地继续我的工作,并且线程堆栈上没有任何错误或其他任何东西。
下面是我的代码:
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);
}
}
}发布于 2014-02-10 21:09:42
在什么情况下会出现异常?
您可以调用File.Exists(dll1Path)来检查您的DLL是否存在。也许这就是你的问题
发布于 2014-02-10 21:12:47
对我来说,你的代码运行得很好。dll/dll1.dll在哪里,它们在bin/debug中吗?
https://stackoverflow.com/questions/21677867
复制相似问题