64,648
社区成员
发帖
与我相关
我的任务
分享
static void _local_unwind2( VC_EXCEPTION_REGISTRATION* _Frame, int argTryLevel ) {
int nTryLevel , nPrevTryLevel;
__try {
while( _Frame->trylevel != 0xFFFFFFFF ) {
nTryLevel = _Frame->trylevel;
if ( argTryLevel!=0xFFFFFFF && nTryLevel <= argTryLevel ) {
return;
}
_Frame->trylevel = nPrevTryLevel = _Frame->scopetable[nTryLevel].previousTryLevel;
if ( _Frame->scopetable[nTryLevel].lpfnFilter ) {
continue;
}
int tmp = (int)&_Frame->_ebp;
FARPROC handler = _Frame->scopetable[nTryLevel].lpfnHandler;
__asm {
mov eax, handler
push ebp
mov ebp, tmp
call eax
pop ebp
}
}
} __except(NestedExceptionHandler()) {}
}