我在MFC扩展DLL中导出如下类
  如果DLL中的对话框模板ID与EXE中的对话框模板ID刚好相等,则显示的是EXE中的对话框
    我想显示DLL中的对话框,杂办? //MyDlg.h   文件:class AFX_EXT_CLASS CMyDlg : public CDialog
{       
         //.... 
//{{AFX_DATA(CMyDlg)
//enum { IDD = IDD_DIALOG1 };
 enum { IDD = 1000 }; // 1000
// NOTE: the ClassWizard will add data members here
//....
};  遇到问题:
   我把对MyDlg.h 文件给可执行文件编译,遇到 IDD_DIALOG1  未定义
     于是,我强行把
           //enum { IDD = IDD_DIALOG1 };
          改为
 enum { IDD = 1000 }; // resourch.h 中,IDD_DIALOG1 =1000如果EXE项目中,有个对话框模板刚好也是等于1000,那显示的就是EXE中的对话框

解决方案 »

  1.   

     总不能修改模板的ID值,是之不相等吧
      你不能保证自己定义的对话框ID,不许应用程序别人用吧
      

  2.   

    在DLL中,必须修改装载的资源!用完后,还要改回来!
      

  3.   

    做资源切换
    AfxSetResourceHandle(GetModuleHandle(_T("你的DLL")));
    AfxSetResourceHandle(GetModuleHandle(NULL));
      

  4.   

    楼上的,我是 我在MFC扩展DLL中直接导出 对话框类
        你的上面两句,加在哪里?
      加在下面的函数里么?加在那个地方?
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    // Remove this if you use lpReserved
    UNREFERENCED_PARAMETER(lpReserved); if (dwReason == DLL_PROCESS_ATTACH)
    {
    TRACE0("SEP25.DLL Initializing!\n");

    // Extension DLL one-time initialization
    if (!AfxInitExtensionModule(Sep25DLL, hInstance))
    return 0;
    new CDynLinkLibrary(Sep25DLL);
    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
    TRACE0("SEP25.DLL Terminating!\n");
    // Terminate the library before destructors are called
    AfxTermExtensionModule(Sep25DLL);
    }
    return 1;   // ok
    }
      

  5.   

    使用资源之前AfxSetResourceHandle(GetModuleHandle(_T("你的DLL"))); 用完之后AfxSetResourceHandle(GetModuleHandle(NULL));
      

  6.   

      我试了一下,  在EXE 项目中,如下调用可达到效果  
       void CTestDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    AfxSetResourceHandle(GetModuleHandle(_T("sep25.dll"))); 
    CMyDlg dlg;
    dlg.DoModal();
    AfxSetResourceHandle(GetModuleHandle(NULL));
    }
      但是人家 EXE 项目中不会记住要这么做的,他只把他当做一个普通类
       如果在DLL内部,该如何做?
      

  7.   

    在DLL中加入
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    可以保证只调用DLL中的资源