1、过程:
我用mfc appwizard(dll) 建了一个dll工程mydll,这时在此工程中只有Cmydll一个类,然后我又添加了一个about对话框类CAboutDLg,我在Cmydll类中添加了一个成员函数showabout(),想在这个函数中打开这个about对话框,语句是
    CAboutDlg aboutdlg;
aboutdlg.DoModal();
这时mydll.def如下:
; clockdemo.def : Declares the module parameters for the DLL.LIBRARY      "clockdemo"
DESCRIPTION  'clockdemo Windows Dynamic Link Library'EXPORTS
    ; Explicit exports can go here
    showabout @1//这是我添加的
然后我在其EXPORTS中添加了一项showabout。
2、结果
最后我在另外一个exe工程中调用mydll工程导出的showabout函数,结果这个对话框总是显示不出来,调试发现程序已经进入showabout函数中也执行了上面两条语句,可是程序没有反应。
很是迷惑,请高手指教!!
3、调试
调试程序能够进入showabout()函数,但是就是显示不出对话框,添加了AFX_MANAGE_STATE(AfxGetStaticModuleState());也不行。
showabout()函数如下:
void CMydllApp::showabout()
{
         AFX_MANAGE_STATE(AfxGetStaticModuleState());
         CAboutDlg aboutdlg;
aboutdlg.DoModal();
//MessageBox(0,"aaaaaaaaaaaaaaa","错误",MB_OK);
}
我把MessageBox解封时,程序可以弹出这个消息对话框.
很是迷惑,请高手指教!!

解决方案 »

  1.   

    好象用dll中的资源时要指明是dll中的,你搜索一下以前的帖子。
      

  2.   

    我建立dll工程时指定动态库的类型是Regular DLL。
    另外,我试了一次用Extension DLL类型建立了工程,void CMydllApp::showabout()函数改成了void WINAPI showabout(),因为在Extension DLL类型建立的工程中已没有CMydllApp类了,结果这时就可以。
    怎么回时呀,这两种建动态库的区别是什么呀?如何让第一种也可以呀?