zoukankan      html  css  js  c++  java
  • 0x7743fcec 处未处理的异常: 0xC015000F: 正被停用的激活上下文不是最近激活的

    //z 2014-07-15 10:36:11 L.169'48229 BG57IV3@XCL T2225937918.K.F3399197987[T19,L485,R12,V288]
    0x7743fcec 处未处理的异常: 0xC015000F: 正被停用的激活上下文不是最近激活的
    突然遇到此种情况。调试了下,跳入的堆栈不对。
    如下所言,设置 : 调试 ----> 异常 ----> win32 exceptions ,勾选所有,一下子就能够定位到错误。
    具体到这次错误,类似下面的代码。(按提示自动完成,没核对,写错了。。。)

    class A
    {
    public:
    	A(const CString& strName):m_strName(m_strName)
    private:
    	CString m_strName;
    }



    最近调试程序时遇到了关于AfxDeactivateActCtx的错误,看堆栈也没任何信息量!崩溃的地方如下:
     

    1. BOOL AFXAPI AfxDeactivateActCtx(DWORD dwFlags, ULONG_PTR ulCookie)  
    2. {  
    3.     BOOL rc = pfnDeactivateActCtx != 0 ?     pfnDeactivateActCtx(dwFlags, ulCookie) : FALSE;  
    4.     return rc;  
    5. }  

         其实这个错误和资源切换有关!造成这个错误有可能是以下原因引起的:

         1、操作或者删除了无效指针

         2、销毁了无效的资源,比如窗口

         这是我经常遇到的情况!肯定还有其他方面深层次的原因,这里不再深究!解决此问题可以专注于程序中的以下几个函数:析构函数/OnClose/OnDestroy/PostNcDestroy以及相关的Release函数,也许在这些函数中你做了不该做的事情!

     

      程序在windowsXP和Windows7 32系统下运行的好好的,今天装了一个windows7 64位系统(说明,程序本身还是32位开发的),运行时出现“0xC015000F 正在被停用的激活上下文不是最近激活的”这个错误,找了好长时间才解决,下面总结如下:

       网上提到较多的方法是在调用CWinApp::InitInstance();接口后面使用afxAmbientActCtx = FALSE;我采用这个方法后确实不会出现这个问题,不过我的程序中有一些代码由于把这个变量设成false后导致不执行,所以会出现其他问题,所以放弃该方法。

     我采用的方式是将Debug时所有MFC异常都抛出,不让MFC处理异常,这样就不会导致crash,方法如下:在VS2008中“Debug”菜单->“Exceptions”->"Win32 Exceptions",然后将这些异常都抛出就可以了,将所有的都check上。不过这样的话应该也会把其他异常给抛出了,比如内存越界之类的。你的代码最好在其他机子上测一下,处理这些异常。

     

     

    项目程序运行的时候,突然出现这个错误,调用堆栈中的函数,没有一个是自己写的,非常困惑。
      在网上搜索了一下,先找到一个提示,可以在CApp::InitInstance()中禁用ActivationContext:
      afxAmbientActCtx= FALSE;
      这种做法能“解决”问题,但进一步查证后发现这实际上是隐藏问题。
       Junfeng Zhang在自己的博客中给了比较详细的解释(http://blogs.msdn.com/b/junfeng/archive/2006/03/19/sxs-activation-context-activate-and-deactivate.aspx)。基本上出现这个错误,是因为在代码中抛 出了异常,从而跳过了与Context Activation对应的Deactivation,导致后续调用Deactivation时,发现栈中的Context不对。
      而MSDN 论坛中, 网友MMDev在回答别人的帖子(http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/c3feab0f-601b-4ca6-beb2-8d4d615438cc/)时给出了比较好的解决方案:
      在Visual Studio中,选择Debug | Exceptions菜单项,在弹出的对话框中,勾选所有的Win32 Exceptions,这样在Win32的异常抛出时,程序就会中断,这样就有机会在第一时间(异常处理前)看到自己的代码中发生了什么错误导致抛出异常,从而改正错误,消除程序中的隐患。


    @IS2120#CNBLOGS.T2169364049[T1,L65,R1,V259]:备忘
    $ € ₤ ₭ ₪ ₩ ₮ ₦ ₱ ฿ ₡ ₫ ﷼ ¥ ﷼ ₫ ₡ ฿ ₱ ₦ ₮ ₩ ₪ ₭ ₤ € $
  • 相关阅读:
    java传递String参数
    C++ string与int的互相转换
    java插入排序
    凸包Graham Scan算法实现
    求平面上N点最远两点和最近两点距离
    求最大公约数
    n个数连接得到最小或最大的多位整数(携程)
    Java快排
    背包问题
    二分查找离左边元素最近的(可以等于)
  • 原文地址:https://www.cnblogs.com/IS2120/p/6745647.html
Copyright © 2011-2022 走看看