C#Visual Studio 2012 - 免费库()阻止应用程序

时间:2014-02-07 08:22:12

标签: c# wpf visual-studio-2012 dllimport loadlibrary

我在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”消息 你知道可能导致这种情况的原因吗?

1 个答案:

答案 0 :(得分:1)

也许LoadLibrary会在库中加载某些资源,而FreeLibrary则会挂起,因为由于此类资源仍在使用中而无法卸载库。

也许这些库在调用FreeLibrary之前有一种方法来调用释放其资源。