void CUseDlg::OnButton1() 
{if (GetModuleHandle(    "E:\\新建文件夹\\vc\\dll5\\Debug\\dll5.dll"  ) != NULL)
{
return;
}
   DllShow Dlg;
HINSTANCE hinstDll;
HINSTANCE hi;
hinstDll = LoadLibrary("E:\\新建文件夹\\vc\\dll5\\Debug\\dll5.dll");
Dlg = 
      (DllShow) GetProcAddress(hinstDll, 
        "ShowDlg");
CString string = "yang";

Dlg(xu);
}这是我调用DLL的代码 如果我在最后一行用FREELIBRARY 就会出现错误 但如果我不用 if (GetModuleHandle(    "E:\\新建文件夹\\vc\\dll5\\Debug\\dll5.dll"  ) != NULL)
{
return;
}
就没用了(好象DLL没有释放) 请问怎么解决

解决方案 »

  1.   

    我的问题你不明白吗 如果我在最后一行使用FREE 那个DLG(XU)就会出问题
    但如果我不FREE 这个DLL就老是在内存中 即使我的DLG(XU)的那个框消失了 新的对话框依然不能出现  其实你回答过我的问题 我的问题还是以前的那个 没解决的 
    就是想让DLL的对话框只出现一次 如果消失就可以再次出现 但如果现在DLL里面的对话框已经存在就让它激活
      

  2.   

    你设置一个标志m_bloadlib, 初使值为FALSE;
    调用了LoadLibrary就把它置为TRUE,
    下次再进来的时候判断一下m_bloadlib,如果为
    TRUE,直接就GetProcAddress
    最后在你析构的时候判断一下m_bloadlib,如果为TRUE
    调用FreeLibrary
      

  3.   

    你应该在对话框过程结束是通知主程序,在此是FreeLibrary
      

  4.   

    if(m_bloadlib)
    FreeLibrary();
      

  5.   

    我还是不太明白 我的目的很简单 想让窗口产生了就不在创建 如果没产生就创建 我的DLL 的代码是void _stdcall ShowDlg(CDialog * xu) { 

       AFX_MANAGE_STATE(AfxGetStaticModuleState());
        xu  = new CDialogDll;    //MessageBox(NULL,string->GetBuffer(0),string->GetBuffer(0),MB_OK);
       xu->Create(IDD_DIALOG1);//非模态
       xu->ShowWindow(SW_SHOW);
      } 
    谁能给个代码算了我实在是不清楚  麻烦各位了