Non-working skeleton build system
[vlc.git] / bindings / cil / src / exception.cs
1 /*
2  * libvlc.cs - libvlc-control CIL bindings
3  *
4  * $Id$
5  */
6
7 /**********************************************************************
8  *  Copyright (C) 2007 RĂ©mi Denis-Courmont.                           *
9  *  This program is free software; you can redistribute and/or modify *
10  *  it under the terms of the GNU General Public License as published *
11  *  by the Free Software Foundation; version 2 of the license, or (at *
12  *  your option) any later version.                                   *
13  *                                                                    *
14  *  This program is distributed in the hope that it will be useful,   *
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of    *
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.              *
17  *  See the GNU General Public License for more details.              *
18  *                                                                    *
19  *  You should have received a copy of the GNU General Public License *
20  *  along with this program; if not, you can get it from:             *
21  *  http://www.gnu.org/copyleft/gpl.html                              *
22  **********************************************************************/
23
24 using System;
25 using System.Runtime.InteropServices;
26
27 namespace VideoLAN.LibVLC
28 {
29     /**
30      * VLCException: managed base class for LibVLC exceptions
31      */
32     public class VLCException : Exception
33     {
34         public VLCException ()
35         {
36         }
37
38         public VLCException (string message)
39             : base (message)
40         {
41         }
42
43         public VLCException (string message, Exception inner)
44            : base (message, inner)
45         {
46         }
47     };
48
49     /**
50      * libvlc_exception_t: structure for unmanaged LibVLC exceptions
51      */
52     [StructLayout (LayoutKind.Sequential)]
53     public sealed class NativeException : IDisposable
54     {
55         int raised;
56         int code;
57         IntPtr message;
58
59         [DllImport ("libvlc-control.dll", EntryPoint="libvlc_exception_init")]
60         static extern void Init (NativeException e);
61         [DllImport ("libvlc-control.dll", EntryPoint="libvlc_exception_clear")]
62         static extern void Clear (NativeException e);
63         /*[DllImport ("libvlc-control.dll",
64                     EntryPoint="libvlc_exception_raised")]
65         static extern int Raised (NativeException e);*/
66         [DllImport ("libvlc-control.dll",
67                     EntryPoint="libvlc_exception_get_message")]
68         static extern IntPtr GetMessage (NativeException e);
69
70         public NativeException ()
71         {
72             Init (this);
73         }
74
75         public void Raise ()
76         {
77             try
78             {
79                 string msg = U8String.FromNative (GetMessage (this));
80                 if (msg != null)
81                     throw new VLCException (msg);
82             }
83             finally
84             {
85                 Clear (this);
86             }
87         }
88
89         public void Dispose ()
90         {
91             Clear (this);
92         }
93     };
94 };