MFC扩展dll, dll中的类继承自CDialog, 但是却无法显示对话框详细描述:
    vc6.0环境    制作一个dll(假设名字是export.dll), MFC扩展dll, 导出一个类(假设类名是CExportClass), 该类继承自CDialog, 
    在创建工程后, 生成一些h和cpp文件, 不做任何改动    其它工程连接这个export.dll(通过链接export.lib, 并且已经包含了头文件), 点击某个按钮, 触发一个函数调用(假设函数是Open()), 该函数内部定义导出类, 然后DoModal, 没有任何反映void Open()
{
CExportClass dlg;
dlg.DoModal();//这里没有任何效果
}我周围的搞vc的同事帮忙看了, 提出了无数中解决方案, 什么切换资源
HINSTANCE hResourceExe = AfxGetResourceHandle();//EXE文件当前资源句柄
AfxSetResourceHandle(GetModuleHandle("export.dll"));//修改当前资源句柄为dll资源句柄
CExportClass dlg;
dlg.DoModal();
AfxSetResourceHandle(hResourceExe);//恢复资源句柄还有设置MFC全局变量
HINSTANCE hResourceExe = AfxGetResourceHandle();//EXE文件当前资源句柄
AfxSetResourceHandle(GetModuleHandle("export.dll"));//修改当前资源句柄为dll资源句柄
AfxEnableControlContainer();
AFX_MANAGE_STATE(AfxGetStaticModuleState());//设置MFC全局变量
CExportClass dlg;
dlg.DoModal();
AfxSetResourceHandle(hResourceExe);//恢复资源句柄都不能解决问题, 我自己也尝试不使用DoModal(), 而使用其它函数, 什么先Create, 再ShowWindow, 都不行由于要对CExportClass类进行大量操作, 不适合导出函数, 所以没有使用正则dll我自己对vc不是很懂, 请高手指教!

解决方案 »

  1.   

    不太了解dll,是否资源处理上有问题
      

  2.   

    程序必须是动态连接MFC库(use mfc in a shared dll)
    静态方式不能显示对话框(其它控件也可能显示不出来)
      

  3.   

    同时,选择“use mfc in a shared dll”可能导致在机器上无法运行,如果对方没有MFC。
    解决方法:
    必须有以下文件夹下的DLL
    C:\Program Files\Microsoft Visual Studio 9.0\VC\ce\dll\armv4
    debug:MFC90UD.DLL msvcr90d.dll
    release:MFC90U.DLL  msvcr90.dll