调试公司的代码,一个动态库导出一个类,在卸载动态库的时候调用FreeLibrary,FreeLibrary卡死在里面。
下面详细描述一下场景和我的一些看法:
1、动态库是用MFC生成的,也就是说DllMain是被封装起来的,我不会改其中的加载/卸载函数。
2、在动态库卸载前,我已确认将导出类对象删除,及时不删除,应该出现崩溃现象才对。现在没有什么好的思路,请各位指点一下,给个方向也好。
下面详细描述一下场景和我的一些看法:
1、动态库是用MFC生成的,也就是说DllMain是被封装起来的,我不会改其中的加载/卸载函数。
2、在动态库卸载前,我已确认将导出类对象删除,及时不删除,应该出现崩溃现象才对。现在没有什么好的思路,请各位指点一下,给个方向也好。
解决方案 »
- messagebox弹不出来啊
- 我想从VC wizard生成框架中的VIEW类再派生 为何编译报错呢?
- 读PKCS #11标准的USB时出错,请教.
- 为什么英文版的firefox下csdn坛子的左侧导航栏乱码?
- 请问一个运行中的EXE程序通过什么途径可以修改自己磁盘上EXE文件的内容?
- ADO开发中奇怪的问题
- 使用FtpCommand命令,出的错误?rest 100,不管用,没有断点续传
- 有谁知道远程登陆的WINDOWS的就象,操作自己电脑一样的那个叫PC什么的软件,那里有下载
- VC6 open dialog
- 请教如何打包crystal report 7.0驱动引擎到我的安装程序中?
- MFC图像处理
- 请指教:怎样获得父窗口中被点击的控件
如果你确实正确的用Windbg扫描,没有死锁。
有可能是Dll释放时清理资源出现死循环,到不一定是锁住
你最好看看windbg释放线程的堆栈。
使用显式加载动态库LoadLibrary,就一定要主动调用FreeLibrary释放Dll,虽然不释放也不会出现问题,那就和Malloc后不free,交给操作系统处理一样了,这样会提示句柄泄露的。
不过你说的这个方法我也试过了,没有效果, 似乎不是这的问题,谢谢了
有dll源码,但是是MFC工程,怎么看内部结构?》
//////////////////////////////////////////////////////////////////////////
//
// 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;
}
}