我用MFC编写了一个DLL,在DLL中使用了非模态窗体,在FreeLibrary时DestroyWindow无响应,求助~!!!!
我的代码如下:
CPPStreamDlg *m_ppdlg;//全局变量,CPPStreamDlg为放置PowerPlayer.dll的窗体
在InitInstance()中创建窗体
         HRESULT hr =OleInitialize(NULL);
if (hr == S_FALSE)
{
OleUninitialize();
return FALSE;
}
AfxEnableControlContainer();
         m_ppdlg = new CPPStreamDlg();
         m_ppdlg->Create(IDD_DIALOG1);
         m_ppdlg->ShowWindow(SW_SHOW);
在ExitInstance()中释放窗体
         m_ppdlg->DestroyWindow();//-------运行到这句程序无响应--------//
         delete m_ppdlg;
         m_ppdlg=NULL;
         CleUninitialize();在CPPStreamDlg上我只放置了PPStream的播放控件PowerPlayer.dll,啥事也没做.在LoadLibrary()时窗体正常显示
在FreeLibrary()时程序死机!!!!!!!!!!!!!!!!!!
什么原因?

解决方案 »

  1.   

    窗体退出的时候有没有释放PowerPlayer.dll呢?
      

  2.   

    if(m_ppdlg!=NULL)
    {         
    m_ppdlg->DestroyWindow();//-------运行到这句程序无响应--------//
             delete m_ppdlg;
             m_ppdlg=NULL;
             CleUninitialize();
    }
    判断一下m_ppdlg是否有效。
      

  3.   

    你在CPPStreamDlg的OnDestroy()函数里判断你的PPStream那个控件是不是正在播放或正在下载,
    然后根据情况进行停止动作,并释放PPStream控件的资源.
    如果完成上面的动作应该不会出现你说的问题了.
      

  4.   

    应该先释放PowerPlayer,然后关闭窗体,并增加判断m_ppdlg是否无效
      

  5.   

    把m_ppdlg->DestroyWindow();这句话去掉,看看程序是否执行ondestroywindow()消息函数!
    印象中我写com时,非模态窗口在com的析构函数里不能用destroywindow();但是如果你在其它地方释放时,又必须destroywindow。至于为什么,我估计可能与非模态窗口的父窗口有些关系!
      

  6.   

    楼主,我现在需要把webbrowser控件重新封装成一个DLL,能请教下怎么弄?另外我的DLL不需要导出函数,它只是一个模块
      

  7.   

    m_ppdlg->DestroyWindow(); 是不执行的啊
      

  8.   

    先测试一下m_ppdlg->DestroyWindow(); 执行到这一句的时候,m_ppdlg所指的地址还是不是原始的地址?