FreeLibrary函数卡死,请教大牛指点

nana_aoe_2013 2013-08-19 10:03:12
调试公司的代码,一个动态库导出一个类,在卸载动态库的时候调用FreeLibrary,FreeLibrary卡死在里面。
下面详细描述一下场景和我的一些看法:
1、动态库是用MFC生成的,也就是说DllMain是被封装起来的,我不会改其中的加载/卸载函数。
2、在动态库卸载前,我已确认将导出类对象删除,及时不删除,应该出现崩溃现象才对。

现在没有什么好的思路,请各位指点一下,给个方向也好。
...全文
1645 21 打赏 收藏 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiao845068232 2013-11-17
  • 打赏
  • 举报
回复
兄弟你这问题解决了吗?我也遇到同样的问题
nana_aoe_2013 2013-09-03
  • 打赏
  • 举报
回复
这,结贴吧,没有得到想要的答案,说明,我的工程是MFC DLL,不是Dll工程,DllMain我是找不到,可能高人能找到吧,这个死锁的问题,慢慢研究
hemmingway 2013-08-30
  • 打赏
  • 举报
回复
一般用过loadlibrary才用FreeLibrary,不然可以不用的啊
davidyu720 2013-08-30
  • 打赏
  • 举报
回复

//////////////////////////////////////////////////////////////////////////
//
//	Entry-Point Function: the first code to execute, also the last code.
//
BOOL APIENTRY DllMain(HMODULE hModule, 
					  DWORD  ul_reason_for_call, 
					  LPVOID lpReserved
					  )
{
	switch(ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		//TODO
		return TRUE;

	case DLL_PROCESS_DETACH:
		//TODO
		return TRUE;

	case DLL_THREAD_ATTACH:
		//TODO
		return TRUE;

	case DLL_THREAD_DETACH:
		//TODO
		return TRUE;

	default:
		return TRUE;
	}
}
nana_aoe_2013 2013-08-29
  • 打赏
  • 举报
回复
引用 13 楼 xuddk727 的回复:
以DLL工程调试,看看是不是DETACH的时候做了什么卡住了
如何调,请指教。
nana_aoe_2013 2013-08-29
  • 打赏
  • 举报
回复
引用 15 楼 lm_whales 的回复:
MFC 有源码的!!!
请教如何看源码
lm_whales 2013-08-21
  • 打赏
  • 举报
回复
MFC 有源码的!!!
Eleven 2013-08-20
  • 打赏
  • 举报
回复
DllMain函数中是怎么写的?
琅琊榜 2013-08-20
  • 打赏
  • 举报
回复
dllmain函数中应该是有问题的
wangk 2013-08-20
  • 打赏
  • 举报
回复
引用 2 楼 nana_aoe 的回复:
我用windbg 分析dump文件,没有看到多个线程争夺锁的情况,有可能是某个线程锁没释放就把线程干掉了的情况,但是不好验证。给个方法。
如果你确实正确的用Windbg扫描,没有死锁。 有可能是Dll释放时清理资源出现死循环,到不一定是锁住 你最好看看windbg释放线程的堆栈。
oyljerry 2013-08-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/breaksoftware/article/details/8159088
smwhotjay 2013-08-20
  • 打赏
  • 举报
回复
大概在dllmain里 处理dll释放 卡住了. 自己打log吧.
fishion 2013-08-20
  • 打赏
  • 举报
回复
创建个新工程,只加载dll,然后释放,看看情况,调用dll中的类方法再释放看看情况。而且FreeLibrary应该都不用主动调用的吧
许文君 2013-08-20
  • 打赏
  • 举报
回复
以DLL工程调试,看看是不是DETACH的时候做了什么卡住了
nana_aoe_2013 2013-08-20
  • 打赏
  • 举报
回复
引用 9 楼 xuddk727 的回复:
既然不是锁住,那你有没有dll源代码,查看下它detach的时候是否做了什么,
有dll源码,但是是MFC工程,怎么看内部结构?》
nana_aoe_2013 2013-08-20
  • 打赏
  • 举报
回复
引用 8 楼 lm_whales 的回复:
MFC 使用 AfxLoadLibary
这个动态库工程虽然是MFC建立的,但是内部没有使用MFC的东西,全部是C++的, 不过你说的这个方法我也试过了,没有效果, 似乎不是这的问题,谢谢了
nana_aoe_2013 2013-08-20
  • 打赏
  • 举报
回复
引用 3 楼 fishion 的回复:
创建个新工程,只加载dll,然后释放,看看情况,调用dll中的类方法再释放看看情况。而且FreeLibrary应该都不用主动调用的吧
使用显式加载动态库LoadLibrary,就一定要主动调用FreeLibrary释放Dll,虽然不释放也不会出现问题,那就和Malloc后不free,交给操作系统处理一样了,这样会提示句柄泄露的。
许文君 2013-08-20
  • 打赏
  • 举报
回复
既然不是锁住,那你有没有dll源代码,查看下它detach的时候是否做了什么,
lm_whales 2013-08-20
  • 打赏
  • 举报
回复
MFC 使用 AfxLoadLibary
nana_aoe_2013 2013-08-19
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
是不是线程死锁了
我用windbg 分析dump文件,没有看到多个线程争夺锁的情况,有可能是某个线程锁没释放就把线程干掉了的情况,但是不好验证。给个方法。
加载更多回复(1)
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 DE1-SOC开发套件是采用Altera的Cyclone V SoC FPGA构建的一个硬件平台,它为嵌入式系统的开发者们构建了一个融合了处理器与FPGA功能的集成实验平台。这份用户手册系统性地阐述了运用这款开发板开展项目开发及学习的方法。 第1章:DE1-SOC开发套件 在这一章节中,主要阐述了DE1-SOC开发套件的核心构成,包括用户在采购时可以预见的包装构成。通常,开发套件会包含DE1-SOC主板、电源适配器、连接线缆以及必须的软件和文档光盘。除此之外,用户还可以了解到如何获取帮助和支持,以便在遭遇问题时能够迅速处理。 第2章:DE1-SOC主板介绍 本章深入剖析了DE1-SOC主板的设计布局和构成组件。开发者可以认识到主板上的各种物理构成部分,例如GPIO接口、存储器、处理器等。同时,通过板级的模块图示,用户能够掌握各个模块的功能及其相互间的连接联系,这对于把握系统的整体构造非常关键。 第3章:使用DE1-SOC主板 在这一部分,用户将学习到如何设置和运用DE1-SOC主板。介绍了FPGA配置模式的设定,这是将用户设计加载至FPGA的必要步骤。随后,详细说明了如何配置Cyclone V SoC FPGA,这个过程可能需要运用硬件描述语言(比如Verilog或VHDL)编程和Quartus II这类集成开发环境。接下来,本章还涵盖了板级状态组件,这些组件展示了FPGA和系统的运行情形,对于故障诊断十分有益。此外,板上复位组件的应用方法也在此部分提供,确保用户能够准确控制系统的启动和重置。关于时钟电路的说明,解释了如何管理和生成不同频段的时钟信号,这对构建高性能数字系统来...

15,465

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧