以下是调用对话框的接口函数
void ShowDlg(void) // 显示对话框  
 {
     AFX_MANAGE_STATE(AfxGetStaticModuleState());
 CtestDlg cdlg; //定义用来测试对话框
 int b =cdlg.DoModal();//对话框正常显示
     Driver dlg;            // 定义对话框变量(Driver是我自己定义的对话框类名)  
//  AfxEnableControlContainer();
 int a = 0;
 a = dlg.DoModal();       // 对话框不显示
  }
CtestDlg 是我新建的测试对话框1,能正常显示
Driver是我正式要用到的对话框,其中加载了一个OCX控件,无法显示
经过调试,我发现两者的区别是测试对话框1在cdlg.DoModal()的时候会调用DoDataExchange函数,而加载了控件的对话框2不会调用,这也应该是导致后者不能正常显示的原因,这是为什么呢?

解决方案 »

  1.   

    你Dll中调用了AfxOleInit();类没有?如App类的InitInstance函数中调用AfxOleInit();
      

  2.   

    网上查了一下,有的说在工程的InitInstance()函数中添加AfxEnableControlContainer(),我也添加过了,但在执行dlg.DoModal();时出现奔溃
      

  3.   

    调用了,这个是程序自动添加的,并且我还加了个AfxEnableControlContainer(),如下
    BOOL CMy840DApp::InitInstance()
    {
    CWinApp::InitInstance();
    AfxOleInit();
    AfxEnableControlContainer(); return TRUE;
    }
      

  4.   

    有无调用CoInitialize() ?