我在C#3 DLL上使用DLLImport LoadLibrary()和FreeLibrary()。 我可以毫无问题地加载3 DLL,但在我使用我的FreeLibrary的应用程序结束时,它不会更进一步,我必须手动停止它。
这是一个WPF应用程序,我必须调用3个DLL,因为它们需要每个人。我无法使用“添加引用”来添加DLL。
以下是代码:
public partial class MainWindow : Window
{
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);
[DllImport("kernel32.dll")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
[DllImport("kernel32.dll")]
public static extern bool FreeLibrary(IntPtr hModule);
public MainWindow()
{
InitializeComponent();
try
{
string pathDllOne = "dll/DllOne.dll";
string pathDllTwo = "dll/DllTwo.dll";
string pathDllThree = "dll/DllThree.dll";
IntPtr DllThreeLink = LoadLibrary(pathDllThree);
IntPtr DllTwoLink = LoadLibrary(pathDllTwo);
IntPtr DllOneLink = LoadLibrary(pathDllOne);
if (DllOneLink == IntPtr.Zero || DllTwoLink == IntPtr.Zero || DllThreeLink == IntPtr.Zero)
Console.WriteLine("WARNING : UNABLE TO FIND ONE OR MORE DLL");
else
Console.WriteLine("LOADING OK");
FreeLibrary(DllThreeLink);
FreeLibrary(DllTwoLink);
FreeLibrary(DllOneLink);
Console.WriteLine("END");
}
catch (Exception ex)
{
Console.WriteLine("ERROR : " + ex.Message);
}
}
}
控制台清楚地显示“正常加载” 当我打电话给“FreeLibrary(DllOneLink);”时,问题就出现了。它不会更进一步,因此它不会显示“END”消息 你知道可能导致这种情况的原因吗?
答案 0 :(得分:1)
也许LoadLibrary
会在库中加载某些资源,而FreeLibrary
则会挂起,因为由于此类资源仍在使用中而无法卸载库。
也许这些库在调用FreeLibrary
之前有一种方法来调用释放其资源。