如果两次调用LoadLibrary加载了同一动态连接库我应该FreeLibrary几回? 我创建的是一个对话框工程。在Initialize时LoadLibrary了一个动态连接库A,原计划在析构函数里FreeLibrary(A)就完了。可是我现在又设置了一个按钮,其功能也是LoadLibrary(A),我想问问我需要FreeLibrary几回呢?为什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不需要再LoadLibrary了,前面别Free就好了 我需要LoadLibrary两回,关键问题是我需要调用几回FreeLibrary啊前辈! 如果一定要这样的话,当然是要释放两回咯……但是为什么不用全局变量只load一次啊?难道是两个类里使用的? 也要FreeLibrary两回,因为每Load一次,DLL的引用计数就增加一次,而每Free一次,引用计数就减小一次,当引用计数为0时,系统将相关的DLL从内存移出去,所以每Load一次就要Free一次 两面看啦,就跟goto是一样的,不同的人用出来,效果是差很多滴~~~~ 如4#所说,每次LoadLibrary,dll的引用计数会加1。而当dll的引用计数为0时系统才会将dll释放。 Load几下Free几下。不过建议你在按键里面使用GetModuleHandle("dllName.dll")得到NULL时再LoadLibrary,这样就不用管理计数问题了。 这个跟次数没关系吧,每次loadlibrary后的handle是不同的啊。free 相应的load 才正确啊。 同一个进程空间,每次load相同的dll时,dll的引用计数也会+1么? 你每调用一个load,就会由系统产生一个DLL的副本。你调用几次,就产生几次。所以你就要Free几次。 同一个进程空间,每次load相同的dll时,dll的引用计数也会+1么?=================应该是会的 明白了。我是这样理解的:即使是在同一个进程中调用了LoadLibrary("A")几回,也必须FreeLabrary几回。这是由于系统计数器每次累计所产生的。不知理解对不对 Load多少次A.dll就要使用多少次Free,关于#13,#14:如果将A.dll改名为B.dll再加载,那么返回两个不同的句柄,这个句柄值其实就是dll加载的基地址。而如果Load多次A.dll,得到的句柄值是相同的。 那么到底有没有系统的计数器管调用次数啊?=========有啊!怎么没有,对一个DLL,比如A.dll,不管有多少个程序用它,在内存中只有一份拷贝,引用计数的作用是用来决定这个DLL还有没有程序在用,当引用计数为0时,表示没有程序引用它了,系统将DLL从内存中拿出去. 不知道总的时间怎么做进度条 这个问题有点难度吗?怎么没人回答? 大专毕业求助,绝望ing 我用ADO连接Access数据库,很简单的句子出错,请问怎么回事? cpu占用达100%,请问如何处理这个问题 如何判断拨号连接是否在线? 请问:如何实现对多个远距离串行设备集中通讯管理? 关于CreateThread 斗地主游戏 一个按钮的实现 大侠们,帮看一段兼容DC相关的小程序 属性表单 请各位大虾帮忙一下,急,急,急
但是为什么不用全局变量只load一次啊?难道是两个类里使用的?
不过建议你在按键里面使用
GetModuleHandle("dllName.dll")得到NULL时再LoadLibrary,这样就不用管理计数问题了。
=================
应该是会的
如果将A.dll改名为B.dll再加载,那么返回两个不同的句柄,这个句柄值其实就是dll加载的基地址。
而如果Load多次A.dll,得到的句柄值是相同的。
=========
有啊!怎么没有,对一个DLL,比如A.dll,不管有多少个程序用它,在内存中只有一份拷贝,引用计数的作用是用来决定这个DLL还有没有程序在用,当引用计数为0时,表示没有程序引用它了,系统将DLL从内存中拿出去.