我创建的是一个对话框工程。在Initialize时LoadLibrary了一个动态连接库A,原计划在析构函数里FreeLibrary(A)就完了。可是我现在又设置了一个按钮,其功能也是LoadLibrary(A),我想问问我需要FreeLibrary几回呢?为什么?

解决方案 »

  1.   

    不需要再LoadLibrary了,前面别Free就好了
      

  2.   

    我需要LoadLibrary两回,关键问题是我需要调用几回FreeLibrary啊前辈!
      

  3.   

    如果一定要这样的话,当然是要释放两回咯……
    但是为什么不用全局变量只load一次啊?难道是两个类里使用的?
      

  4.   

    也要FreeLibrary两回,因为每Load一次,DLL的引用计数就增加一次,而每Free一次,引用计数就减小一次,当引用计数为0时,系统将相关的DLL从内存移出去,所以每Load一次就要Free一次
      

  5.   

    两面看啦,就跟goto是一样的,不同的人用出来,效果是差很多滴~~~~
      

  6.   

    如4#所说,每次LoadLibrary,dll的引用计数会加1。而当dll的引用计数为0时系统才会将dll释放。
      

  7.   

    Load几下Free几下。
    不过建议你在按键里面使用
    GetModuleHandle("dllName.dll")得到NULL时再LoadLibrary,这样就不用管理计数问题了。
      

  8.   

    这个跟次数没关系吧,每次loadlibrary后的handle是不同的啊。free 相应的load 才正确啊。
      

  9.   

    同一个进程空间,每次load相同的dll时,dll的引用计数也会+1么?
      

  10.   

    你每调用一个load,就会由系统产生一个DLL的副本。你调用几次,就产生几次。所以你就要Free几次。
      

  11.   

    同一个进程空间,每次load相同的dll时,dll的引用计数也会+1么?
    =================
    应该是会的
      

  12.   

    明白了。我是这样理解的:即使是在同一个进程中调用了LoadLibrary("A")几回,也必须FreeLabrary几回。这是由于系统计数器每次累计所产生的。不知理解对不对
      

  13.   

    Load多少次A.dll就要使用多少次Free,关于#13,#14:
    如果将A.dll改名为B.dll再加载,那么返回两个不同的句柄,这个句柄值其实就是dll加载的基地址。
    而如果Load多次A.dll,得到的句柄值是相同的。
      

  14.   

    那么到底有没有系统的计数器管调用次数啊?
    =========
    有啊!怎么没有,对一个DLL,比如A.dll,不管有多少个程序用它,在内存中只有一份拷贝,引用计数的作用是用来决定这个DLL还有没有程序在用,当引用计数为0时,表示没有程序引用它了,系统将DLL从内存中拿出去.