这个错误System Error Code:6句柄无效,怎么解决

时间:2021-03-27 18:40:07
如题
在抛出异常后,出现
System Error Code:6句柄无效,
怎么解决,才怎么解决?
是不是Exception类的问题呀

10 个解决方案

#1


在你跑出异常前,是不是把某个句柄关了,或删了,有没有源码

#2


很大的一个程序,游戏方面的,它在结束时抛出一个GameEnd异常,然后就出现这个提示

#3


比如说,用FileOpen打开文件,然后用FileClose关闭了文件,这时的文件句柄就是无效的。

#4


跟踪一下,在退出函数中的关闭或者处理的 Handle

#5


在结束的时候有一个函数
::PostQuitMessage(0);
然后就出现
Systerm error code: 6

#6


执行PostQuitMessage的目的就是要退出程序,既然你的程序已经结束了,还执行PostQuitMessage干什么?

#7


我跟踪了一下,过程是这样
游戏结束调用throw EGameEnd(),EGameEnd,是这么定义的
class EGameEnd : public Exception
{
public:
    __fastcall EGameEnd()
        : Exception("GameEnd"){};
};
然后转到这里
 catch( EGameEnd &e )
    {

    }
    catch( Exception &exception )
    {
     ErrLog.AddLog(exception.Message);
     GameForm->GameEnd(false);   
    }
    catch(...)
    {
     ErrLog.AddLog("不明中断");
     GameForm->GameEnd(false);   
    }
    }
    __finally
    {
        GameForm->GameCSect->Release();
        MainThread = NULL;
    }

在然后就到
SysUtils.hpp里的
#pragma option push -w-inl
/* TObject.Destroy */ inline __fastcall virtual ~Exception(void) { }
#pragma option pop
之后就会弹出错误对话框EOSError System Error Code:6句柄无效
这什么问题?

#8


程序结束时,你为什么自己调用throw EGameEnd()啊?

#9



    __finally
    {
        GameForm->GameCSect->Release();
        MainThread = NULL;
    }

这里是不是重复调用了GAMEEND:

#10


To : tom1995 (汤姆) 

PostQuitMessage函数
是不是在
catch( EGameEnd &e )
    {
    }
中调用的?

#1


在你跑出异常前,是不是把某个句柄关了,或删了,有没有源码

#2


很大的一个程序,游戏方面的,它在结束时抛出一个GameEnd异常,然后就出现这个提示

#3


比如说,用FileOpen打开文件,然后用FileClose关闭了文件,这时的文件句柄就是无效的。

#4


跟踪一下,在退出函数中的关闭或者处理的 Handle

#5


在结束的时候有一个函数
::PostQuitMessage(0);
然后就出现
Systerm error code: 6

#6


执行PostQuitMessage的目的就是要退出程序,既然你的程序已经结束了,还执行PostQuitMessage干什么?

#7


我跟踪了一下,过程是这样
游戏结束调用throw EGameEnd(),EGameEnd,是这么定义的
class EGameEnd : public Exception
{
public:
    __fastcall EGameEnd()
        : Exception("GameEnd"){};
};
然后转到这里
 catch( EGameEnd &e )
    {

    }
    catch( Exception &exception )
    {
     ErrLog.AddLog(exception.Message);
     GameForm->GameEnd(false);   
    }
    catch(...)
    {
     ErrLog.AddLog("不明中断");
     GameForm->GameEnd(false);   
    }
    }
    __finally
    {
        GameForm->GameCSect->Release();
        MainThread = NULL;
    }

在然后就到
SysUtils.hpp里的
#pragma option push -w-inl
/* TObject.Destroy */ inline __fastcall virtual ~Exception(void) { }
#pragma option pop
之后就会弹出错误对话框EOSError System Error Code:6句柄无效
这什么问题?

#8


程序结束时,你为什么自己调用throw EGameEnd()啊?

#9



    __finally
    {
        GameForm->GameCSect->Release();
        MainThread = NULL;
    }

这里是不是重复调用了GAMEEND:

#10


To : tom1995 (汤姆) 

PostQuitMessage函数
是不是在
catch( EGameEnd &e )
    {
    }
中调用的?