首先MFC创建一个ACTIVEX控件
然后在控件的Ctrl类中添加左键按下消息
然后在控件中添加一DLG 并在DLG上插入当前创建的这个控件 并为其添加一个变量
注意 在此对话框的构造里加上AfxEnableControlContainer();
然后在刚才添加的左键按下消息中 添加一个该对话框的变量  domodel()程序崩溃   大家讨论讨论哈  难道是这种结构不合法吗?红色的字是重点 大家不要忘了
如果不给那个控件添加变量 便不会崩溃

解决方案 »

  1.   

    这不是死循环了吗?堆栈不溢出了?在左键按下消息函数里面,申请一个临时DLG,这样我认为可以的。
      

  2.   

    我就是在申请的临时DLG   
      

  3.   

    直接的办法就是 用你的MFC的ActiveX工程做调试目标
    然后跟踪
      

  4.   

    出错后点重试 可以定位到
    ASSERT(FromHandlePermanent(hWndNew)   ==   NULL); 如果是普通控件的话可能是资源重复可在嵌套使用active控件的时候代表什么呢??难道在一个控件内部不能再出现该控件的另外一个实例?
    导致内部指针出错了 类似于窗口指针 CREATE了两次吗?
      

  5.   

    控件A里面有个dlg,dlg里面有个控件A,为什么要设计成这种样子?别忘了控件要注册成功才能使用
      

  6.   

    不是控件A
    是active控件的一个实例  里面有个DLG   然后DLG里面有这个activeX控件的另外一个实例
      

  7.   

    是不是动态链接MFC了,改用静态链接MFC看看。
      

  8.   

    现在不直接绑定变量
    通过getdlgitem返回指针 暂时绕过这个问题
    帖子放几天  再等等 然后结贴放分
      

  9.   

    >>然后在控件中添加一DLG   并在DLG上插入当前创建的这个控件   并为其添加一个变量
    >>然后在刚才添加的左键按下消息中   添加一个该对话框的变量     domodel() 
    感觉不是很清楚,LZ最好贴出代码?按照常理来讲,这种情况不会有问题, 更不会有死循环的问题。
    有可能是写法有错误,最常见的是ActiveX的实现类里有一些映射产生了混乱。
      

  10.   

    我就是用MFC创建了个什么也不干的控件 所以没什么代码好贴啊我说的 就是个创建的过程  大家按着这步骤试 一下就会看到效果了 
      

  11.   

    既然是断言错误,为什么不用RELEASE 版本的ActiveX!
      

  12.   

    试了跟了一下,的确有问题。
    看起来跟MFC的线程模块状态有关系。
    一般来说,ActiveX DLL 与调用它的对话框拥有不同的模块状态, 这里的情况比较特殊,ActiveX DLL和调用它的对话框处在同一个模块里,自然有同样的模块状态。这一点可能引起ActiveX的模块状态切换失败,从而引起窗口句柄当面的问题。
    当然,有一些猜想的成分,有待验证。
      

  13.   

    是的 所以我现在采用不绑定变量,而是通过getdlgitem动态取得控件指针的方法 目前为止还没发现有什么问题 但是我觉得这就类似 在ActiveX中使用GDI+要添加GDI+的初始化函数一样 如果放在instence里 会造成和Active控件的死琐,如果放在其他位置初始化就可以了一样  应该也有个直接解决这个问题的方案