条件:  我用MFC开发的带界面的Activex控件a,在界面上有一个按钮,点击按钮弹出一个对话框c; 然后又开发了一个带界面控件b,在控件b界面上有个按钮,点击按钮将弹出一个对话框d,对话框d中使用了控件a。     这是我来使用控件b,即点击界面上的按钮,弹出对话框d,在点击控件a上的按钮,弹出对话框c, 然后切换一下程序,这是来关闭对话框c就会崩掉。并且奇怪的是我用dubug版的就会崩,release就不会崩。  请高手帮忙解释一下这里的原因? 谢谢。

解决方案 »

  1.   

    release 不会出错是因为,你所说崩只是引发了一个断言。所以在release下不会出现。我估计还是你的c代码有问题,换句话说,c退出的时候,查出断言在哪里并反推,应该是操作变量时指向了不存在的控件或其他原因。断言的可能性很多,只能多调试才能发现细节。
      

  2.   

    关闭C的时候,是不是企图去关闭a或者销毁a上的某些东西了,导致a的某些指针没有了或者销毁了?
    关闭C的时候是怎么关闭的,C对话框是公有的还是私有的,私有的应为不会有问题,要是公有的,可能别的地方还有用C的地方呢。把A里面弹出C的代码贴出来看看!
      

  3.   

    您好,您可能没有理解我的意思,可能是我写的比较笼统。我把代码粘过来会比较容易理解:axtivex_1:在带界面的控件1OnCreate函数里添加m_mainDlg.Create(IDD_MAINDLG1,this);   m_mainDlg.ShowWindow(TRUE);  m_mainDlg对话框的样式是Style:Child、Border:None,其他保持默认。在这个对话框中有一个按钮,按钮实现BN_CLICKED事件,按钮的功能是点击他探出一个对话框,具体实现CchildDlg m_child;   m_child.DoModal(); activex_2: 带界面控件2的实现和控件1一样,也是在OnCreate函数里添加m_mainDlg2.Create(IDD_MAINDIG2,this);   m_mainDlg2.ShowWindow(TRUE);  m_mainDlg2对话框的样式是Style:Child、Border:None,其他保持默认。在这个对话框中也有一个按钮,按钮实现BN_CLICKED事件,按钮的功能也是点击他弹出一个对话框,具体实现CchildDlg2 m_child2;   m_child2.DoModal();    与前边一个CchildDlg不同的是,CchildDlg2对话框里使用了控件1。 这时我来写个测试程序来使用控件2  ,当操作一直弹出控件1的CchildDlg后,这是切换一下程序后再回来关闭CchildDlg,程序就甭掉了  具体的情况就是这样了,你能具体的帮我解释一下吗?是我程序的原因还是其他的原因?
      

  4.   

    有点复杂。A调B,B调C,结果B调C的时侯出了问题。你先直接调用C看看有没有问题。
    再调用B看看有没有问题,
    再调用A看看出什么错。 
      

  5.   

    直接调C不会有问题,并且把程序编译成realease也不会出问题,