在atl使用mfc扩张dll,对话框无法显示啊。急啊,大侠救命啊。在线等!

解决方案 »

  1.   

    因为MFC扩展DLL需要一个CWinApp对象
    而你的atl工程选择了支持mfc没有?
      

  2.   

    选择了支持mfc没有?   选了。CWinApp对象有没有?   有=========================================
     笑死我了,不过关注一下。
    你的扩展DLL一般是导出资源或类什么的。导出一个类的话,应该用一个超类(全用虚函数,类似于接口)来实现。
      

  3.   

    关键是你得资源入口没有设置到DLL里边,这个和是什么DLL没有关系,MFC有个宏  AFX_MANAGE_STATE(AfxGetStaticModuleState( ));要不你就用API好象是什么SetResourc...什么都,参数需要你得DLL句柄。
      

  4.   

    你的扩展DLL一般是导出资源或类什么的。导出一个类的话,应该用一个超类(全用虚函数,类似于接口)来实现。
    ================
    你怎么知道没有导出全局函数什么的直接使用的东西?
    难道非要导出class么?谁规定的?
      

  5.   

    直接在资源中NEW一个Dialog,然后给它创建一个DLG类,在你的借口函数里引进这个类就OK啦!声明一个对话框的类,DoModal()就可以显示啦,我最近也刚做完这方面的一个控件,需要的话我可以发给你我做的参考一下,不过要给我点分哦!
      

  6.   

    是声明这个对话框类一个对象在DoModal()
      

  7.   

    关键是你得资源入口没有设置到DLL里边,这个和是什么DLL没有关系,MFC有个宏  AFX_MANAGE_STATE(AfxGetStaticModuleState( ));要不你就用API好象是什么SetResourc...什么都,参数需要你得DLL句柄。没有设置资源载入的入口点,你的对话框模版就找不到,当然你的对话框就显示不出来了。
      

  8.   

    楼上的回答里面,提到“AFX_MANAGE_STATE(AfxGetStaticModuleState( ))”的,是80%正解。楼主应该采纳。在你的ATL程序里,准备“Create”或者“DoModal”的前面先加上这句!而剩下的20%是这样,MFC扩展DLL的向导生成代码的注释里明确说了,当MFC扩展DLL的调用者不是MFC EXE,而是MFC DLL时(你的支持MFC的ATL组件相当于MFC DLL),必须将“new CDynLinkLibrary(newlistviewDLL);”这句从DllMain里拿掉。然后单独做一个引出函数如:void AFX_EXT_API InitMyListViewModule()
    {
    new CDynLinkLibrary(newlistviewDLL);
    }然后在你的MFC DLL的CWinApp::InitInstance里手动调用这个函数。至此,MFC扩展DLL的链式资源才算是彻底初始化完毕。你的对话框若是再弹不出来,就请你检讨一下最近有没有做什么亏心事了……