现碰到一个棘手的问题,请教大家:在DLL中新建一个对话框,怎么总是失败。我在DLL中的resource中新建了一个窗体,然后新建了一个类CImgConvertDlg和这个窗体
关联起来。然后在在DLL中建立了一个导出函数Imgconvert()void ImgConvert()
{
AfxMessageBox("1");
CImgConvertDlg *imgConvetdlg= new CImgConvertDlg();
AfxMessageBox("2");
imgConvetdlg->Create( NULL,NULL,WS_VISIBLE,CRect( 0,0,100,100),NULL,IDD_IMGCONVERTDLG,NULL);
AfxMessageBox("3");
imgConvetdlg->ShowWindow(SW_SHOW);
AfxMessageBox("4");
imgConvetdlg->SendMessage(WM_USER_IMGCONVERTBEGIN);
}通不过,主要是Create()函数中,有错。
void ImgConvert()
{
CImgConvertDlg imgConvetdlg;
imgConvetdlg.DoModal();
}写一个测试程序来测试这个DLL,点了没有反映。请教各位,也请大家自己动手写写,看错在什么地方?

解决方案 »

  1.   

    AFX_MANAGE_STATE(AfxGetStaticModuleState());http://community.csdn.net/Expert/topic/3296/3296255.xml?temp=5.112857E-02
      

  2.   

    应该是资源句柄的问题,你的dll是什么模式创建的?
      

  3.   

    你的导出函数是ImgConvert,怎么没用?
      

  4.   

    以上都是DLL里面的代码导出函数是ImgConvert,在测试程序调用。
      

  5.   

    我的DLL工程中,选项都是默认的意思是这样的:
    我要在DLL中新建一个对话框,取名为IDD_IMGCONVERTDLG, 然后又新建了一个类CImgConvertDlg和这个窗体关联起来。然后在在DLL中建立了一个导出函数Imgconvert(),写了以下的一些代码,发现通不过。
    方案一:
    void ImgConvert()
    {
    AfxMessageBox("1");
    CImgConvertDlg *imgConvetdlg= new CImgConvertDlg();
    AfxMessageBox("2");
    imgConvetdlg->Create( NULL,NULL,WS_VISIBLE,CRect( 0,0,100,100),NULL,IDD_IMGCONVERTDLG,NULL);
    AfxMessageBox("3");
    imgConvetdlg->ShowWindow(SW_SHOW);
    AfxMessageBox("4");
    imgConvetdlg->SendMessage(WM_USER_IMGCONVERTBEGIN);
    }
    通不过,主要是Create()函数中,有错。
    方案二:
    void ImgConvert()
    {
    CImgConvertDlg imgConvetdlg;
    imgConvetdlg.DoModal();
    }
    然后写了一个测试程序来测试:(下面是另外一个工程的代码,我是静态调用DLL)
    void CTestDllMFCDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    ImgConvert();

    }
    以上两种方案都通不过。请教各位。
      

  6.   

    在create 之前,AFX_MANAGE_STATE(AfxGetStaticModuleState());不能少哦,另外,对话框
    上别添加richedit或active控件,因为加这些要初始化的,少了初始化语句不行
      

  7.   

    加上了AFX_MANAGE_STATE(AfxGetStaticModuleState());
    但问题还是没有解决
      

  8.   

    不用new/Create,直接声明一变量然后DoModal()?
      

  9.   

    在ImgConvert中最开始加上下边两行:
    HINSTANCE save_hInstance = AfxGetResourceHandle();
    AfxSetResourceHandle(theApp.m_hInstance);然后在最后加上
    AfxSetResourceHandle(save_hInstance);如:
    {
    HINSTANCE save_hInstance = AfxGetResourceHandle();
    AfxSetResourceHandle(theApp.m_hInstance);
    CImgConvertDlg imgConvetdlg;
    imgConvetdlg.DoModal();
    AfxSetResourceHandle(save_hInstance);
    }
    应该就可以了
      

  10.   

    http://www.codeguru.com/Cpp/W-P/dll/article.php/c101/Dialog In Dll