使用LoadLibrary()调用DLL,使用FreeLibrary()释放之后出现访问报错,这个问题应该比较普遍

时间:2021-03-09 08:44:19
WinXP,VS2003
使用Win SDK开发的DLL,在MFC程序中调用。一切正常。但是调用FreeLibrary()之后出错,在调用这个函数处理的过程中都能成功,后面就不行了。请问这是何原因

谢谢

9 个解决方案

#1


是不是有些函数还在调用

#2


不会。本来就没有多线程,都是同步调用的。如果还有函数在调用,是执行不到FreeLibrary的。这个问题,我在微软的技术网站也见过类似的,好像是PROCESS_DETACH的时候需要一个什么处理。那是讲MFC的DLL的

#3


加载动态库的时候,在初始化中加载,在程序结束的时候进行释放,不要每次加载/释放。

#4


我卡 FreeLibrary 这2天了 郁闷啊

#5


我的处理就是不释放,在LoadLibrary()之后保存其实例句柄,中间要用的时候直接使用。
等程序结束之后,它会自动释放的。我不去手动释放也没关系。

#6


可能是dll里面内存溢出,错误啦.

#7


FreeLibrary之后出错的话可能是你还在访问已经被释放了的资源引起的

#8


好像找到原因了,因为在我的DLL中使用了全局变量。

#9


可能FreeLibrary后,你还在使用其中函数或变量

#1


是不是有些函数还在调用

#2


不会。本来就没有多线程,都是同步调用的。如果还有函数在调用,是执行不到FreeLibrary的。这个问题,我在微软的技术网站也见过类似的,好像是PROCESS_DETACH的时候需要一个什么处理。那是讲MFC的DLL的

#3


加载动态库的时候,在初始化中加载,在程序结束的时候进行释放,不要每次加载/释放。

#4


我卡 FreeLibrary 这2天了 郁闷啊

#5


我的处理就是不释放,在LoadLibrary()之后保存其实例句柄,中间要用的时候直接使用。
等程序结束之后,它会自动释放的。我不去手动释放也没关系。

#6


可能是dll里面内存溢出,错误啦.

#7


FreeLibrary之后出错的话可能是你还在访问已经被释放了的资源引起的

#8


好像找到原因了,因为在我的DLL中使用了全局变量。

#9


可能FreeLibrary后,你还在使用其中函数或变量