//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
//  
// Jest to główny plik projektu aplikacji VC++
// wygenerowany przy użyciu Application Wizarda.

#include "stdafx.h"

#using <mscorlib.dll>

using namespace System;

__gc class MyException : public System::ApplicationException
{
public:
	MyException() : System::ApplicationException()
	{
	}
	MyException(System::String __gc *msg) : System::ApplicationException(msg)
	{
	}
};

void ThrowMyException()
{
	throw new MyException(new System::String("Ten wyjątek jest zgłaszany z ThrowMyException"));
	// zgłoszenie nowego wyjątkuMyException;
}

// Główny punkt wejścia dla aplikacji
int wmain(void)
{
	try
	{
		ThrowMyException();
	}
	catch (MyException *e)
	{
		Console::WriteLine("Przechwycono wyjątek");
		Console::WriteLine(e->ToString());
	}
	__finally
	{
		Console::WriteLine("Blok Finally");
	}

	try
	{
		ThrowMyException();
	}
	catch (...)
	{
		Console::WriteLine("Przechwycono ogólny wyjątek");
	}
	__finally
	{
		Console::WriteLine("Ogólny wyjątek w finally");
	}

	Console::WriteLine("Prawie gotowe");

	return 0;
}