//
// 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.
//
// 
using System;
using System.Runtime.InteropServices;

namespace UnmanagedException
{
	/// <summary>
	/// Podsumowanie dla UnmanagedExceptionTest.
	/// </summary>
	class NativeMethods
	{
		[DllImport("UnmanagedFault.dll")]
		public static extern int Custom();
		[DllImport("UnmanagedFault.dll")]
		public static extern int Fail();
		[DllImport("UnmanagedFault.dll")]
		public static extern int DivideByZero();
		[DllImport("UnmanagedFault.dll")]
		public static extern int MemoryAccess();
		[DllImport("UnmanagedFault.dll")]
		public static extern int Win32Error();
	}
	class UnmanagedExceptionTest
	{
		static void Main(string[] args)
		{
			Console.WriteLine("\nDzielenie przez zero\n");
			try
			{
				int result;
				result = NativeMethods.DivideByZero();
			}
			catch(Exception e)
			{
				Console.WriteLine(e.ToString());
			}
			Console.WriteLine("\nDostęp do pamięci\n");
			try
			{
				int result;
				result = NativeMethods.MemoryAccess();
			}
			catch(Exception e)
			{
				Console.WriteLine(e.ToString());
			}
			Console.WriteLine("\nBłąd\n");
			try
			{
				int result;
				result = NativeMethods.Fail();
			}
			catch(Exception e)
			{
				Console.WriteLine(e.ToString());
			}
			Console.WriteLine("\nWłasny\n");
			try
			{
				int result;
				result = NativeMethods.Custom();
			}
			catch(Exception e)
			{
				Console.WriteLine(e.ToString());
			}
		}
	}
}
