我用LoadLibrary加载了一个链接库,使用是正常的。
但是我要用FreeLibrary释放,返回值也是True, 但是就是不是放掉。
表现在,我查看本进程使用的模块中还有它
        我重新编译该链接库就无法链接了。请问,什么原因。如何解决。

解决方案 »

  1.   


                 这说明你对载入这个DLL后,对这个DLL的调用是不对称的,
                 例如你调用了一个OPEN(),它开了一个线程,
                 但这个线程直到你调用CLOSE()只有才会安全退出,
                 如果你不调用CLOSE()直接FreeLibrary,酒会出现你遇到的情况。
                 有些时候还需要你CLOSE之后,额外Sleep()一端时间。
                  LoadLibrary()              ...
                  OpenResource();
                  ...
                  CloseResource();
                  ...              FreeLibrary();
      

  2.   

    FreeLibrary()只是将libraray的计数器减一,是否将此DLL从内存中释放,取决于DLL的计数器是否已经为零.所以你的问题可能是出现在此LIBRARY不止一次地被调入(即loadlibrary不止调用了一次).
      

  3.   

    我对 Skt32(Skt32)的说法有不同意见,即使在LIBRARY中产生了一个线程,只要没能等待线程的语句,如waitforsingleobject()...,library也还是可以被清除的.
      

  4.   

    如果FreeLibrary释放失败,windows也会帮你释放,不会引起编绎通不过。
    一定是调用程序或DLL中的线程没正常释放。用“任务管理器”可以查查调用进程是否关闭。
      

  5.   

    同意Zark(金陵五月),你说的也是一种情况。总之是,DLL还在运行。但是,我觉得这个帖子的情况,比较大的可能是我说的那种。
      

  6.   

    表现在,我查看本进程使用的模块中还有它是一直有吗?是新线程吗?sleep一会还有吗?
            我重新编译该链接库就无法链接了。你没整好,整好了不会的
      

  7.   

    同意 Skt32(Skt32) 
    使用内核对象时要特别小心