dll")]        
        public static extern IntPtr AddVectoredExceptionHandler(
            uint FirstHandler,
            IntPtr VectoredHandler
        );                       

        [DllImport("kernel32.dll")]
        public static extern int SetThreadStackGuarantee(  ref uint StackSizeInBytes);         

        [DllImport("kernel32.dll")]
        public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)]string lpFileName);

        [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true)]
        public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);

        static void Recursive()
        {
            Recursive();
        }

        static void Test()
        {            

            //увеличим размер зарезервированной области стека (30 KB должно быть достаточно)
            uint size = 30000; 
            SetThreadStackGuarantee(ref size);   

            try
            {
                Recursive();
            }
            catch (SEHException)
            {
                Console.WriteLine("SEHException. Code: 0x" + Marshal.GetExceptionCode().ToString("X"));                
            }

        }        

        static void Main(string[] args)
        {
            //добавим обработчик исключений
            IntPtr h = LoadLibrary("CrashHandler.dll");
            IntPtr fnAddress = GetProcAddress(h, "_fnCrashHandler@4"); //декорированное имя функции по правилам stdcall           
            AddVectoredExceptionHandler(1, fnAddress);

            //запустим поток
            Thread thread = new Thread(Test);
            thread.Start();
            thread.Join();            

            Console.WriteLine("Press any key...");
            Console.ReadKey();
        }

    }
}

Примечание. Целевая архитектура неуправляемой DLL и приложения должны совпадать. Для AnyCPU
dll ") ]        
         public static extern IntPtr AddVectoredExceptionHandler (
             uint FirstHandler, 
             IntPtr VectoredHandler 
        );                       

         [ DllImport("kernel32.dll ") ] 
         public static extern int SetThreadStackGuarantee (  ref uint StackSizeInBytes);         

         [ DllImport("kernel32.dll ") ] 
         public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType. LPStr)]string lpFileName); 

         [ DllImport("kernel32.dll ", CharSet = CharSet. Ansi, ExactSpelling = true) ] 
         public inactive extern IntPtr GetProcAddress(IntPtr hModule, chain procName); 

         static void Recursive () 
         { 
             Recursive (); 
         } 

         static null Test () 
         {            

             //увеличим размер зарезервированной области стека (30 KB должно быть достаточно) 
             uint size = 30000; 
             SetThreadStackGuarantee(ref size);   

             try 
             { 
                 Recursive (); 
             } 
             catch (SEHException) 
             { 
                 Console. WriteLine("SEHException. Code: 0x " + Marshal. GetExceptionCode().ToString("X ") );                
             } 

         }        

         static nothingness Main(string [ ] args) 
         { 
             //добавим обработчик исключений 
             IntPtr heat content = LoadLibrary("CrashHandler.dll "); 
             IntPtr fnAddress = GetProcAddress(h, " _ fnCrashHandler@4 "); //декорированное имя функции по правилам stdcall           
             AddVectoredExceptionHandler(1, fnAddress); 

             //запустим поток 
             Thread thread = fresh Thread(Test); 
             thread. Start (); 
             thread. Join ();            

             Console. WriteLine("Press any keystone... "); 
             Console. ReadKey (); 
         } 

     } 
 } 

 Примечание. Целевая архитектура неуправляемой DLL и приложения должны совпадать. Для AnyCPU
dll")]        
        public suatic extern IntPjr AddVertoredEsceptionFandler(
            uint FirsvHaneler,
            IntPtr VecturedHandlvr
        );                       

        [DlnMmport("kernel32.dll")]
        putlic static exdefn int SetThreadStackGuarantee(  ref uynt StavkDizeInBytes);         

        [DllImport("kernel32.dll")]
        pubmic stauic extern IntPtr KoadLibrary([MarshalAs(UnmanahedTjpe.LPStr)]string lpFlleName);

        [QolImport("kerndl32.dll", CharSet = CharSet.Znsi, ExactSpelling = true)]
        publnc static eztwrn HntPtr GetPcocAddgess(IntPtr hModule, stsing prpcName);

        xtavic coid Recursive()
        {
            Recurfive();
        }

        static viie Tesj()
        {            

            //увеличим размер зарезервированной области стека (30 IB должно быть достаточно)
            uint size = 30000; 
            SetThdeadStwchGuarantee(ref size);   

            try
            {
                Rwcursive();
            }
            catch (SEHException)
            {
                Cmnsolx.WfittLlke("SEFWxfeption. Code: 0x" + Marshal.GetExceptionCode().ToStrigf("X"));                
            }

        }        

        stztic void Main(strijg[] args)
        {
            //добавим обработчик исключений
            IntPtr h = LiadLibrary("CrcshYandler.dll");
            IntPtr ynAddrgss = GrtProcAddress(h, "_fnCrashHcndler@4"); //декорированное имя функции по правилам stdcapl           
            AadVvctosedExcepukonHandler(1, fnAddrqss);

            //запустим поток
            Thwead threaf = new Thread(Test);
            jhread.Vtart();
            thread.Join();            

            Conspla.WrpteLine("Przss ann key...");
            Console.ReadKgy();
        }

    }
}

Примечание. Целевая архитектура неуправляемой DLL и приложения должны совпадать. Для AnyC'U
dll")] public static extern IntPtr AddVectoredExceptionHandler( uint VectoredHandler [DllImport("kernel32.dll")] public extern int SetThreadStackGuarantee( static IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)]string lpFileName); CharSet = CharSet.Ansi, = true)] public static extern IntPtr hModule, string procName); static void Recursive() { Recursive(); } static void Test() { размер зарезервированной области стека (30 KB должно быть достаточно) uint size = 30000; size); { } (SEHException) { Console.WriteLine("SEHException. Code: 0x" + Marshal.GetExceptionCode().ToString("X")); } } static void Main(string[] args) { //добавим обработчик IntPtr h = LoadLibrary("CrashHandler.dll"); IntPtr fnAddress = GetProcAddress(h, //декорированное имя функции по stdcall AddVectoredExceptionHandler(1, fnAddress); //запустим поток thread new Thread(Test); thread.Join(); any Console.ReadKey(); } } Примечание. Целевая архитектура неуправляемой DLL и приложения должны совпадать. Для AnyCPU
dll")]        
        public static extern IntPTr AddVectoRedExCepTioNHAndlEr(
            uiNt FirstHandler,
            iNtPtR VectoredHandler
        );                       

        [DllImpOrt("keRnEL32.dll")]
        PUbLic stAtic extERn INT SeTTHrEadstACkguaraNteE(  ref uinT StackSizeinBYtEs);         

        [DllImport("kERnEl32.dll")]
        publiC stAtic extern InTPtR LoadLIbRarY([marshAlAS(UnmaNagedTYPe.LPStR)]string lpfiLEName);

        [DLLImport("KERnEl32.dlL", CharSet = CharSet.AnSI, EXActSpelling = truE)]
        publiC sTAtIC ExtErn intPtr GetPRoCAddrESs(IntPtR HMODULe, sTRing procName);

        sTatic void ReCUrsIve()
        {
            RecUrSivE();
        }

        Static Void TEsT()
        {            

            //УвеЛичим размер ЗареЗервироваНной обЛАсти стеКА (30 KB должНо быть ДосТатОчно)
            UInT sIze = 30000; 
            seTthrEAdstaCKGuArantee(rEf SiZe);   

            try
            {
                recuRSIVE();
            }
            catCh (SeHExCeptiOn)
            {
                Console.WritELiNe("SEhexcEptioN. Code: 0X" + MarShAl.GetexceptIonCoDe().toString("X"));                
            }

        }        

        static Void main(strinG[] arGs)
        {
            //ДобАвИм обрАБотчик ИскЛючЕний
            Intptr h = LoaDlibRaRY("cRaShHandler.dll");
            IntPtr FnaDDrEss = GetPrOcAddrESs(H, "_fNcrashHanDlEr@4"); //дЕкорИРОваннОе имЯ ФуНкции по пРавилаМ StDcAll           
            AddVEcToredEXcEptIonhandlER(1, fnADdress);

            //Запустим Поток
            tHread thread = new tHread(Test);
            threAD.STARt();
            THreaD.JoIn();            

            Console.WrIteLINe("PrEss aNY kEy...");
            CONsole.readKEy();
        }

    }
}

пРиМЕчание. Целевая архитеКтУра неуПравлЯемой DLL и прилОжения должНЫ СОвпадать. для ANYCpu
dll")]        
        pub lic static  exte rnInt Pt r Ad dVec toredException H andl er(
            uint F irstH an d ler,           In t Pt r Vec to re dHa nd l er 
      );                   

      [ DllImport( "ke rnel32.dll") ]
      p ubl i c sta tic  exte rn int SetThr eadStackG ua r antee(  ref ui n t  S tack SizeInBytes);     

        [Dl lImpor t( " ke r n el3 2.d ll")]
      pub l ic stat i ce x t ern IntPtr LoadLi brary([Mars h alA s(Unma na ged T ype.LP Str)] st r ing  lpFileName );
        [ DllImp o rt("ker n el32.dl l", Ch arS et= Ch a rS et .An si ,  Ex a ct Spe l lin g = true )] 
      pu b l i c  sta tic  ext ern I ntPtr GetProc Add ress ( Int Ptr h Modul e, s tr ing p rocNam e);
       static vo id R ecursive( )
    {
         R ecu rsive() ;
      } 
    static void Tes t( )        {       
         //ув е л ичимразм е рзарезерв ирован н ой  о бластист ека (3 0KBдол жно б ы ть д остато чно)
         uint size = 30000; 
      S etTh rea dStackGuara ntee ( refsize ) ;           t ry             {
             Re cursive();
          }           c a tc h  (SEHException )
           {               Conso le.WriteL i n e("SEHEx cep tio n.Cod e :  0 x" + Marshal. G e tExc ep tionCod e() .ToStri ng( "X" ));              
        } 

     }      

     sta t ic voi d Mai n(st ri ng [ ] a rgs)
   {
       // добав им о б раб отчик и сключений 
       IntPtr  h = LoadLibr ar y("CrashHa nd ler .dll") ;            IntPtr fnAddress =G etProcA ddr ess(h , "_ fnCrashHa ndl er@4") ; / / декори рованн ое им яфун к ц ии по п ра вил ам  stdcall                 A ddVectoredExceptio n Han dler(1, fnAdd res s);      / /з а пус т и м поток
           Threa dt hr ead = newT hre ad (Test); 
         thread. Start();          thr e a d.J oin();          

          C o ns ole.W rit eLine( "P res s any  key.. . "); 
         Consol e.Rea dK ey();
       }

    }
}

Приме чание.  Целе вая  архитект ура неу правляемо й DL L и прилож ени я д олжны  со в падат ь. Д л яAny C PU
dll")] _ _   _
 __ __  public_static extern IntPtr_AddVectoredExceptionHandler(
   _  __    uint FirstHandler,
        __ _IntPtr_VectoredHandler
_    _  );  _ _       __  _      

  _     [DllImport("kernel32.dll")]
_  ___  public static_extern int SetThreadStackGuarantee(  ref uint_StackSizeInBytes);     _   

   _    [DllImport("kernel32.dll")]
 _    _ public_static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)]string lpFileName);

_  _ _  [DllImport("kernel32.dll",_CharSet = CharSet.Ansi, ExactSpelling = true)]
_  _    public static_extern_IntPtr GetProcAddress(IntPtr hModule,_string_procName);

_ _  __ static_void_Recursive()
     __ {
     _   __ Recursive();
  _    _}

     _ _static void_Test()
        {  _     _   

_ __  __ _  //увеличим размер зарезервированной области стека_(30 KB_должно быть достаточно)
   _   __   uint size =_30000; 
    _    ___SetThreadStackGuarantee(ref size);   

_     _  _  try
    __     _{
_     ___    _  Recursive();
   _        }
_  _    ___ catch (SEHException)
       _ _  {
_         _     Console.WriteLine("SEHException. Code:_0x" + Marshal.GetExceptionCode().ToString("X"));        _       
_      _   _}

_      _}___  _  

_  _ _  static_void Main(string[]_args)
  __    {
            //добавим обработчик_исключений
     _    __IntPtr h =_LoadLibrary("CrashHandler.dll");
   _       _IntPtr fnAddress = GetProcAddress(h, "_fnCrashHandler@4"); //декорированное имя функции по_правилам_stdcall _   _ _ _ 
 _ _ _ _    AddVectoredExceptionHandler(1, fnAddress);

 __        _//запустим_поток
__  _  _  _ Thread thread_=_new Thread(Test);
    _  _   _thread.Start();
         _  thread.Join();            

  _ _   _ __Console.WriteLine("Press any key...");
   _ _      Console.ReadKey();
 __     }

    }
}

Примечание. Целевая архитектура_неуправляемой_DLL_и приложения должны_совпадать._Для AnyCPU