呵呵,去他的论坛注册不上,只好在这里发贴了。
大家看看我的问题再哪?
我按他的动态加载方法加载了一个含有对话框的dll,点击菜单,就会弹出一个dll中的对话框。但是关闭对话框,再打开,任务管理器中的内存指示又增加了一些。重复打开,再关闭。不断地增加。
void CMy2000Dlg::OnMENUITEMmunu()
{
// TODO: Add your command handler code here
typedef void (WINAPI * TESTDLL)();
HINSTANCE hmod;
hmod = ::LoadLibrary ("ttc.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
if(lpproc!=(TESTDLL)NULL)
(*lpproc)();
FreeLibrary(hmod); 为了试验hmod是否被释放,我在这加了如下代码
if(hmod!=NULL)
{
AfxMessageBox("没有释放资源");//结果,弹出对话框后,关闭以后,就显示了此对话框的内容
}
}
大家看看我的问题再哪?
我按他的动态加载方法加载了一个含有对话框的dll,点击菜单,就会弹出一个dll中的对话框。但是关闭对话框,再打开,任务管理器中的内存指示又增加了一些。重复打开,再关闭。不断地增加。
void CMy2000Dlg::OnMENUITEMmunu()
{
// TODO: Add your command handler code here
typedef void (WINAPI * TESTDLL)();
HINSTANCE hmod;
hmod = ::LoadLibrary ("ttc.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
if(lpproc!=(TESTDLL)NULL)
(*lpproc)();
FreeLibrary(hmod); 为了试验hmod是否被释放,我在这加了如下代码
if(hmod!=NULL)
{
AfxMessageBox("没有释放资源");//结果,弹出对话框后,关闭以后,就显示了此对话框的内容
}
}
FreeLibrary()有返回值,判断返回值的真假来判断是否释放。
2)另外LZ怎么知道内存一直没有释放呢?
如果只是简单的通过NULL == A 就说明A没有释放是不负责任的,因为出现野指针的时候,这种方式是没有用的
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
if(lpproc!=(TESTDLL)NULL)
(*lpproc)();