>From 86c7b8ff8cb4acf1a9e5eee0c6534c03e1264e70 Mon Sep 17 00:00:00 2001
From: Arnaud <arnaud.champion@devatom.fr>
Date: Sat, 30 Oct 2010 16:30:46 +0200
Subject: [PATCH] Add / cleaning comments. New sample virConnectSetErrorFunc. Correct virDomainInfo marshaling

---
 Connect.cs                                         |    3 +
 Domain.cs                                          |    5 +-
 Errors.cs                                          |   16 +-
 Event.cs                                           |    3 +
 Interface.cs                                       |    3 +
 Library.cs                                         |    3 +
 MarshalHelper.cs                                   |   22 +-
 NativeFunctions.cs                                 |   11 +-
 Network.cs                                         |    3 +
 Node.cs                                            |    3 +
 Secret.cs                                          |    3 +
 StoragePool.cs                                     |    5 +-
 StorageVol.cs                                      |  161 +++------
 Stream.cs                                          |    3 +
 Types.cs                                           |   27 +-
 .../virConnectSetErrorFunc/AssemblyInfo.cs         |   27 ++
 .../MonoDevelop/virConnectSetErrorFunc/Main.cs     |   17 +
 .../virConnectSetErrorFunc/MainWindow.cs           |   79 ++++
 .../virConnectSetErrorFunc/gtk-gui/MainWindow.cs   |  260 +++++++++++++
 .../virConnectSetErrorFunc/gtk-gui/generated.cs    |   29 ++
 .../virConnectSetErrorFunc/gtk-gui/gui.stetic      |  381 ++++++++++++++++++++
 .../virConnectSetErrorFunc.csproj                  |    1 +
 .../virEventRegisterImpl/gtk-gui/MainWindow.cs     |    1 -
 .../virEventRegisterImpl.csproj                    |   62 ++++-
 .../virConnectSetErrorFunc/Form1.Designer.cs       |  237 ++++++++++++
 .../VisualStudio/virConnectSetErrorFunc/Form1.cs   |   50 +++
 .../VisualStudio/virConnectSetErrorFunc/Form1.resx |  120 ++++++
 .../VisualStudio/virConnectSetErrorFunc/Program.cs |   21 ++
 .../Properties/AssemblyInfo.cs                     |   36 ++
 .../Properties/Resources.Designer.cs               |   71 ++++
 .../Properties/Resources.resx                      |  117 ++++++
 .../Properties/Settings.Designer.cs                |   30 ++
 .../Properties/Settings.settings                   |    7 +
 .../virConnectSetErrorFunc.csproj                  |   93 +++++
 projects/MonoDevelop/LibvirtBindings.sln           |    9 +-
 projects/VisualStudio/LibvirtBindings.csproj       |    2 +
 projects/VisualStudio/LibvirtBindings.sln          |   13 +
 37 files changed, 1791 insertions(+), 143 deletions(-)
 create mode 100644 examples/MonoDevelop/virConnectSetErrorFunc/AssemblyInfo.cs
 create mode 100644 examples/MonoDevelop/virConnectSetErrorFunc/Main.cs
 create mode 100644 examples/MonoDevelop/virConnectSetErrorFunc/MainWindow.cs
 create mode 100644 examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/MainWindow.cs
 create mode 100644 examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/generated.cs
 create mode 100644 examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/gui.stetic
 create mode 100644 examples/MonoDevelop/virConnectSetErrorFunc/virConnectSetErrorFunc.csproj
 rewrite examples/MonoDevelop/virEventRegisterImpl/virEventRegisterImpl.csproj (100%)
 create mode 100644 examples/VisualStudio/virConnectSetErrorFunc/Form1.Designer.cs
 create mode 100644 examples/VisualStudio/virConnectSetErrorFunc/Form1.cs
 create mode 100644 examples/VisualStudio/virConnectSetErrorFunc/Form1.resx
 create mode 100644 examples/VisualStudio/virConnectSetErrorFunc/Program.cs
 create mode 100644 examples/VisualStudio/virConnectSetErrorFunc/Properties/AssemblyInfo.cs
 create mode 100644 examples/VisualStudio/virConnectSetErrorFunc/Properties/Resources.Designer.cs
 create mode 100644 examples/VisualStudio/virConnectSetErrorFunc/Properties/Resources.resx
 create mode 100644 examples/VisualStudio/virConnectSetErrorFunc/Properties/Settings.Designer.cs
 create mode 100644 examples/VisualStudio/virConnectSetErrorFunc/Properties/Settings.settings
 create mode 100644 examples/VisualStudio/virConnectSetErrorFunc/virConnectSetErrorFunc.csproj

diff --git a/Connect.cs b/Connect.cs
index 5530c32..516bc5a 100644
--- a/Connect.cs
+++ b/Connect.cs
@@ -11,6 +11,9 @@ using System.Runtime.InteropServices;
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The Connect class expose all connection related methods
+    /// </summary>
     public class Connect
     {
         private const int MaxStringLength = 1024;
diff --git a/Domain.cs b/Domain.cs
index 6d32300..4f1aba2 100644
--- a/Domain.cs
+++ b/Domain.cs
@@ -11,6 +11,9 @@ using System.Runtime.InteropServices;
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The Domain class expose the domains related methods
+    /// </summary>
     public class Domain
     {
         /// <summary>
@@ -314,7 +317,7 @@ namespace Libvirt
         /// Path to the interface.
         /// </param>
         /// <param name="stats">
-        /// A <see cref="virDomainInterfaceStatsStruct"/>network interface stats (returned).
+        /// A <see cref="DomainInterfaceStatsStruct"/>network interface stats (returned).
         /// </param>
         /// <param name="size">
         /// Size of stats structure.
diff --git a/Errors.cs b/Errors.cs
index 921d067..ae8047f 100644
--- a/Errors.cs
+++ b/Errors.cs
@@ -38,7 +38,7 @@ namespace Libvirt
         /// A <see cref="IntPtr"/>pointer to the user data provided in the handler callback.
         /// </param>
         /// <param name="handler">
-        /// A <see cref="virErrorFunc"/>function to get called in case of error or NULL
+        /// A <see cref="ErrorFunc"/>function to get called in case of error or NULL
         /// </param>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virConnSetErrorFunc")]
         public static extern void ConnSetErrorFunc(IntPtr conn, IntPtr userData, [MarshalAs(UnmanagedType.FunctionPtr)] ErrorFunc handler);
@@ -49,7 +49,7 @@ namespace Libvirt
         /// One will need to free the result with virResetError().
         /// </summary>
         /// <param name="to">
-        /// A <see cref="virError"/> target to receive the copy.
+        /// A <see cref="Error"/> target to receive the copy.
         /// </param>
         /// <returns>
         /// 0 if no error was found and the error code otherwise and -1 in case of parameter error.
@@ -61,7 +61,7 @@ namespace Libvirt
         /// Default routine reporting an error to stderr.
         /// </summary>
         /// <param name="err">
-        /// A <see cref="virError"/> pointer to the error.
+        /// A <see cref="Error"/> pointer to the error.
         /// </param>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virDefaultErrorFunc")]
         public static extern void DefaultErrorFunc([In] Error err);
@@ -70,7 +70,7 @@ namespace Libvirt
         /// Resets and frees the given error.
         /// </summary>
         /// <param name="err">
-        /// A <see cref="virError"/> error to free.
+        /// A <see cref="Error"/> error to free.
         /// </param>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virFreeError")]
         public static extern void FreeError(Error err); // Does not work, anybody know why?
@@ -83,13 +83,13 @@ namespace Libvirt
         /// A pointer to the last error or NULL if none occurred.
         /// </returns>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virGetLastError")]
-        public static extern int GetLastError();
+        public static extern Error GetLastError();
 
         /// <summary>
         /// Reset the error being pointed to.
         /// </summary>
         /// <param name="err">
-        /// A <see cref="virError"/> pointer to the to clean up.
+        /// A <see cref="Error"/> pointer to the to clean up.
         /// </param>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virResetError")]
         public static extern void ResetError(Error err);
@@ -105,7 +105,7 @@ namespace Libvirt
         /// Save the last error into a new error object.
         /// </summary>
         /// <returns>
-        /// A <see cref="virError"/> pointer to the copied error or NULL if allocation failed. 
+        /// A <see cref="Error"/> pointer to the copied error or NULL if allocation failed. 
         /// It is the caller's responsibility to free the error with virFreeError().
         /// </returns>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virSaveLastError")]
@@ -119,7 +119,7 @@ namespace Libvirt
         /// A <see cref="IntPtr"/>pointer to the user data provided in the handler callback.
         /// </param>
         /// <param name="handler">
-        /// A <see cref="virErrorFunc"/>function to get called in case of error or NULL.
+        /// A <see cref="ErrorFunc"/>function to get called in case of error or NULL.
         /// </param>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virSetErrorFunc")]
         public static extern void SetErrorFunc(IntPtr userData, [MarshalAs(UnmanagedType.FunctionPtr)] ErrorFunc handler);
diff --git a/Event.cs b/Event.cs
index 1540d70..c6a0673 100644
--- a/Event.cs
+++ b/Event.cs
@@ -10,6 +10,9 @@ using System.Runtime.InteropServices;
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The Event class expose all the event related methods
+    /// </summary>
     public class Event
     {
         ///<summary>
diff --git a/Interface.cs b/Interface.cs
index 51d1f76..9434b2b 100644
--- a/Interface.cs
+++ b/Interface.cs
@@ -8,6 +8,9 @@
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The Interface class expose all interface related methods
+    /// </summary>
     public class Interface
     {
         // TODO virInterfaceCreate
diff --git a/Library.cs b/Library.cs
index 03f2038..1a0a3a3 100644
--- a/Library.cs
+++ b/Library.cs
@@ -10,6 +10,9 @@ using System.Runtime.InteropServices;
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The Library class expose all libvirt library related methods
+    /// </summary>
     public class Library
     {
         /// <summary>
diff --git a/MarshalHelper.cs b/MarshalHelper.cs
index fc93893..6d4b351 100644
--- a/MarshalHelper.cs
+++ b/MarshalHelper.cs
@@ -11,8 +11,17 @@ using System.Runtime.InteropServices;
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The MarshalHelper class provide some methods that simplify marshaling
+    /// </summary>
     public class MarshalHelper
     {
+        /// <summary>
+        /// Convert an Inttr to a string array
+        /// </summary>
+        /// <param name="stringPtr">The pointer to the first element of the array</param>
+        /// <param name="stringCount">The number of elements in the array</param>
+        /// <returns>The string array</returns>
         public static string[] ptrToStringArray(IntPtr stringPtr, int stringCount)
         {
             string[] members = new string[stringCount];
@@ -23,13 +32,22 @@ namespace Libvirt
             }
             return members;
         }
-
+        /// <summary>
+        /// Convert an IntPtr to a string
+        /// </summary>
+        /// <param name="stringPtr">The pointer</param>
+        /// <returns>The string</returns>
         public static string ptrToString(IntPtr stringPtr)
         {
             IntPtr s = Marshal.ReadIntPtr(stringPtr, IntPtr.Size);
             return Marshal.PtrToStringAnsi(s);
         }
-
+        /// <summary>
+        /// Shift a pointer by offset (32 or 64 bits pointer)
+        /// </summary>
+        /// <param name="src">The pointer</param>
+        /// <param name="offset">The offset in bytes</param>
+        /// <returns>the shifted pointer</returns>
         public static IntPtr IntPtrOffset(IntPtr src, int offset)
         {
             switch (IntPtr.Size)
diff --git a/NativeFunctions.cs b/NativeFunctions.cs
index 25d7532..5805d88 100644
--- a/NativeFunctions.cs
+++ b/NativeFunctions.cs
@@ -7,16 +7,21 @@
  */
 
 using System;
-using System.Collections.Generic;
-using System.Linq;
 using System.Runtime.InteropServices;
-using System.Text;
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The class expose some useful native functions
+    /// </summary>
     public class NativeFunctions
     {
         // TODO : this is atemporary workaround for virConnectOpenAuth callback, this should be removed
+        /// <summary>
+        /// duplicate a string. The strdup function shall return a pointer to a new string, which is a duplicate of the string pointed to by s1.
+        /// </summary>
+        /// <param name="strSource">Pointer to the string that should be duplicated</param>
+        /// <returns>a pointer to a new string on success. Otherwise, it shall return a null pointer</returns>
         [DllImport("msvcrt.dll", EntryPoint = "_strdup", CallingConvention = CallingConvention.Cdecl)]
         public static extern IntPtr StrDup(IntPtr strSource);
     }
diff --git a/Network.cs b/Network.cs
index 9c4bdff..9164637 100644
--- a/Network.cs
+++ b/Network.cs
@@ -11,6 +11,9 @@ using System.Runtime.InteropServices;
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The Network clas expose all libvirt network related functions
+    /// </summary>
     public class Network
     {
         /// <summary>
diff --git a/Node.cs b/Node.cs
index e4389f3..fb4c3af 100644
--- a/Node.cs
+++ b/Node.cs
@@ -11,6 +11,9 @@ using System.Runtime.InteropServices;
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The Node class expose all libvirt node related functions
+    /// </summary>
     public class Node
     {
 		private const int MaxStringLength = 1024;
diff --git a/Secret.cs b/Secret.cs
index 34f38a0..885a52e 100644
--- a/Secret.cs
+++ b/Secret.cs
@@ -8,6 +8,9 @@
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The Secret class expose all libvirt secret related functions
+    /// </summary>
     public class Secret
     {
         // TODO virSecretDefineXML
diff --git a/StoragePool.cs b/StoragePool.cs
index ec0d635..504f9aa 100644
--- a/StoragePool.cs
+++ b/StoragePool.cs
@@ -11,6 +11,9 @@ using System.Runtime.InteropServices;
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The StoragePool class expose all libvirt storage pool related functions
+    /// </summary>
     public class StoragePool
     {
 		private const int MaxStringLength = 1024;
@@ -90,7 +93,7 @@ namespace Libvirt
         /// A <see cref="IntPtr"/>pointer to storage pool.
         /// </param>
         /// <param name="flags">
-        /// A <see cref="virStoragePoolDeleteFlags"/>flags for obliteration process.
+        /// A <see cref="StoragePoolDeleteFlags"/>flags for obliteration process.
         /// </param>
         /// <returns>
         /// 0 on success, or -1 if it could not be obliterate.
diff --git a/StorageVol.cs b/StorageVol.cs
index 9730172..6c44073 100644
--- a/StorageVol.cs
+++ b/StorageVol.cs
@@ -11,43 +11,30 @@ using System.Runtime.InteropServices;
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The StorageVol class expose all libvirt storage volume related functions
+    /// </summary>
     public class StorageVol
     {
 
         /// <summary>
         /// Create a storage volume within a pool based on an XML description. Not all pools support creation of volumes.
         /// </summary>
-        /// <param name="pool">
-        /// A <see cref="IntPtr"/>pointer to storage pool.
-        /// </param>
-        /// <param name="xmldesc">
-        /// A <see cref="System.String"/>description of volume to create.
-        /// </param>
-        /// <param name="flags">
-        /// A <see cref="System.UInt32"/>flags for creation (unused, pass 0).
-        /// </param>
-        /// <returns>
-        /// The storage volume, or NULL on error.
-        /// </returns>
+        /// <param name="pool">A <see cref="IntPtr"/>pointer to storage pool.</param>
+        /// <param name="xmldesc">A <see cref="System.String"/>description of volume to create.</param>
+        /// <param name="flags">A <see cref="System.UInt32"/>flags for creation (unused, pass 0).</param>
+        /// <returns>The storage volume, or NULL on error.</returns>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virStorageVolCreateXML")]
         public static extern IntPtr CreateXML(IntPtr pool, string xmldesc, uint flags);
 
         /// <summary>
-        /// Create a storage volume in the parent pool, using the 'clonevol' volume as input. 
+        /// Create a storage volume in the parent pool, using the 'clonevol' volume as input.
         /// Information for the new volume (name, perms) are passed via a typical volume XML description.
         /// </summary>
-        /// <param name="pool">
-        /// A <see cref="IntPtr"/>pointer to parent pool for the new volume.
-        /// </param>
-        /// <param name="xmldesc">
-        /// A <see cref="System.String"/>description of volume to create.
-        /// </param>
-        /// <param name="clonevol">
-        /// A <see cref="IntPtr"/>storage volume to use as input.
-        /// </param>
-        /// <param name="flags">
-        /// A <see cref="System.UInt32"/>flags for creation (unused, pass 0).
-        /// </param>
+        /// <param name="pool">A <see cref="IntPtr"/>pointer to parent pool for the new volume.</param>
+        /// <param name="xmldesc">A <see cref="System.String"/>description of volume to create.</param>
+        /// <param name="clonevol">A <see cref="IntPtr"/>storage volume to use as input.</param>
+        /// <param name="flags">A <see cref="System.UInt32"/>flags for creation (unused, pass 0).</param>
         /// <returns>
         /// A <see cref="IntPtr"/>the storage volume, or NULL on error.
         /// </returns>
@@ -57,70 +44,46 @@ namespace Libvirt
         /// <summary>
         /// Delete the storage volume from the pool.
         /// </summary>
-        /// <param name="vol">
-        /// A <see cref="IntPtr"/>pointer to storage volume.
-        /// </param>
-        /// <param name="flags">
-        /// A <see cref="System.UInt32"/>future flags, use 0 for now.
-        /// </param>
-        /// <returns>
-        /// 0 on success, or -1 on error.
-        /// </returns>
+        /// <param name="vol">A <see cref="IntPtr"/>pointer to storage volume.</param>
+        /// <param name="flags">A <see cref="System.UInt32"/>future flags, use 0 for now.</param>
+        /// <returns>0 on success, or -1 on error.</returns>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virStorageVolDelete")]
         public static extern int Delete(IntPtr vol, uint flags);
 
         /// <summary>
         /// Release the storage volume handle. The underlying storage volume continues to exist.
         /// </summary>
-        /// <param name="vol">
-        /// A <see cref="IntPtr"/>pointer to storage volume.
-        /// </param>
-        /// <returns>
-        /// 0 on success, or -1 on error.
-        /// </returns>
+        /// <param name="vol">A <see cref="IntPtr"/>pointer to storage volume.</param>
+        /// <returns>0 on success, or -1 on error.</returns>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virStorageVolFree")]
         public static extern int Free(IntPtr vol);
 
         /// <summary>
-        /// Provides the connection pointer associated with a storage volume. 
-        /// The reference counter on the connection is not increased by this call. 
-        /// WARNING: When writing libvirt bindings in other languages, do not use this function. 
+        /// Provides the connection pointer associated with a storage volume.
+        /// The reference counter on the connection is not increased by this call.
+        /// WARNING: When writing libvirt bindings in other languages, do not use this function.
         /// Instead, store the connection and the volume object together.
         /// </summary>
-        /// <param name="vol">
-        /// A <see cref="IntPtr"/>
-        /// </param>
-        /// <returns>
-        /// A <see cref="IntPtr"/>
-        /// </returns>
+        /// <param name="vol">A <see cref="IntPtr"/> pointer to the storage volume</param>
+        /// <returns>A <see cref="IntPtr"/>A Pointer to the connect that hold the storage volume</returns>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virStorageVolGetConnect")]
         public static extern IntPtr GetConnect(IntPtr vol);
 
         /// <summary>
         /// Fetches volatile information about the storage volume such as its current allocation.
         /// </summary>
-        /// <param name="vol">
-        /// A <see cref="IntPtr"/>pointer to storage volume.
-        /// </param>
-        /// <param name="info">
-        /// A <see cref="virStorageVolInfo"/>pointer at which to store info.
-        /// </param>
-        /// <returns>
-        /// 0 on success, or -1 on failure.
-        /// </returns>
+        /// <param name="vol">A <see cref="IntPtr"/>pointer to storage volume.</param>
+        /// <param name="info">A <see cref="StorageVolInfo"/>pointer at which to store info.</param>
+        /// <returns>0 on success, or -1 on failure.</returns>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virStorageVolGetInfo")]
         public static extern int GetInfo(IntPtr vol, ref StorageVolInfo info);
 
         /// <summary>
-        /// Fetch the storage volume key. 
+        /// Fetch the storage volume key.
         /// This is globally unique, so the same volume will have the same key no matter what host it is accessed from
         /// </summary>
-        /// <param name="vol">
-        /// A <see cref="IntPtr"/>pointer to storage volume.
-        /// </param>
-        /// <returns>
-        /// The volume key, or NULL on error.
-        /// </returns>
+        /// <param name="vol">A <see cref="IntPtr"/>pointer to storage volume.</param>
+        /// <returns>The volume key, or NULL on error.</returns>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virStorageVolGetKey")]
         [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(StringWithoutNativeCleanUpMarshaler))]
         public static extern string GetKey(IntPtr vol);
@@ -128,25 +91,19 @@ namespace Libvirt
         /// <summary>
         /// Fetch the storage volume name. This is unique within the scope of a pool.
         /// </summary>
-        /// <param name="vol">
-        /// A <see cref="IntPtr"/>pointer to storage volume.
-        /// </param>
-        /// <returns>
-        /// The volume name, or NULL on error.
-        /// </returns>
+        /// <param name="vol">A <see cref="IntPtr"/>pointer to storage volume.</param>
+        /// <returns>The volume name, or NULL on error.</returns>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virStorageVolGetName")]
         [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(StringWithoutNativeCleanUpMarshaler))]
         public static extern string GetName(IntPtr vol);
 
         /// <summary>
-        /// Fetch the storage volume path. 
-        /// Depending on the pool configuration this is either persistent across hosts, 
-        /// or dynamically assigned at pool startup. 
+        /// Fetch the storage volume path.
+        /// Depending on the pool configuration this is either persistent across hosts,
+        /// or dynamically assigned at pool startup.
         /// Consult pool documentation for information on getting the persistent naming.
         /// </summary>
-        /// <param name="vol">
-        /// A <see cref="IntPtr"/>pointer to storage volume.
-        /// </param>
+        /// <param name="vol">A <see cref="IntPtr"/>pointer to storage volume.</param>
         /// <returns>
         /// The storage volume path, or NULL on error.
         /// </returns>
@@ -157,15 +114,9 @@ namespace Libvirt
         /// <summary>
         /// Fetch an XML document describing all aspects of the storage volume.
         /// </summary>
-        /// <param name="vol">
-        /// A <see cref="IntPtr"/>pointer to storage volume.
-        /// </param>
-        /// <param name="flags">
-        /// A <see cref="System.UInt32"/>flags for XML generation (unused, pass 0).
-        /// </param>
-        /// <returns>
-        /// The XML document, or NULL on error.
-        /// </returns>
+        /// <param name="vol">A <see cref="IntPtr"/>pointer to storage volume.</param>
+        /// <param name="flags">A <see cref="System.UInt32"/>flags for XML generation (unused, pass 0).</param>
+        /// <returns>The XML document, or NULL on error.</returns>
         [DllImport("libvirt-0.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "virStorageVolGetXMLDesc")]
         [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(StringWithoutNativeCleanUpMarshaler))]
         public static extern string GetXMLDesc(IntPtr vol, uint flags);
@@ -173,12 +124,8 @@ namespace Libvirt
         /// <summary>
         /// Fetch a pointer to a storage volume based on its globally unique key.
         /// </summary>
-        /// <param name="conn">
-        /// A <see cref="IntPtr"/>pointer to hypervisor connection.
-        /// </param>
-        /// <param name="key">
-        /// A <see cref="System.String"/>globally unique key.
-        /// </param>
+        /// <param name="conn">A <see cref="IntPtr"/>pointer to hypervisor connection.</param>
+        /// <param name="key">A <see cref="System.String"/>globally unique key.</param>
         /// <returns>
         /// A <see cref="IntPtr"/>storage volume, or NULL if not found / error.
         /// </returns>
@@ -188,12 +135,8 @@ namespace Libvirt
         /// <summary>
         /// Fetch a pointer to a storage volume based on its name within a pool.
         /// </summary>
-        /// <param name="pool">
-        /// A <see cref="IntPtr"/>pointer to storage pool.
-        /// </param>
-        /// <param name="name">
-        /// A <see cref="System.String"/>name of storage volume.
-        /// </param>
+        /// <param name="pool">A <see cref="IntPtr"/>pointer to storage pool.</param>
+        /// <param name="name">A <see cref="System.String"/>name of storage volume.</param>
         /// <returns>
         /// A <see cref="IntPtr"/>storage volume, or NULL if not found / error.
         /// </returns>
@@ -203,12 +146,8 @@ namespace Libvirt
         /// <summary>
         /// Fetch a pointer to a storage volume based on its locally (host) unique path.
         /// </summary>
-        /// <param name="conn">
-        /// A <see cref="IntPtr"/>pointer to hypervisor connection.
-        /// </param>
-        /// <param name="path">
-        /// A <see cref="System.String"/>locally unique path.
-        /// </param>
+        /// <param name="conn">A <see cref="IntPtr"/>pointer to hypervisor connection.</param>
+        /// <param name="path">A <see cref="System.String"/>locally unique path.</param>
         /// <returns>
         /// A <see cref="IntPtr"/>storage volume, or NULL if not found / error.
         /// </returns>
@@ -216,16 +155,14 @@ namespace Libvirt
         public static extern IntPtr LookupByPath(IntPtr conn, string path);
 
         /// <summary>
-        /// Increment the reference count on the vol. For each additional call to this method, 
-        /// there shall be a corresponding call to virStorageVolFree to release the reference count, 
-        /// once the caller no longer needs the reference to this object. 
-        /// This method is typically useful for applications where multiple threads are using a connection, 
-        /// and it is required that the connection remain open until all threads have finished using it. ie, 
+        /// Increment the reference count on the vol. For each additional call to this method,
+        /// there shall be a corresponding call to virStorageVolFree to release the reference count,
+        /// once the caller no longer needs the reference to this object.
+        /// This method is typically useful for applications where multiple threads are using a connection,
+        /// and it is required that the connection remain open until all threads have finished using it. ie,
         /// each new thread using a vol would increment the reference count.
         /// </summary>
-        /// <param name="vol">
-        /// A <see cref="IntPtr"/>the vol to hold a reference on.
-        /// </param>
+        /// <param name="vol">A <see cref="IntPtr"/>the vol to hold a reference on.</param>
         /// <returns>
         /// A <see cref="System.Int32"/>0 in case of success, -1 in case of failure.
         /// </returns>
diff --git a/Stream.cs b/Stream.cs
index 3b24543..bef3719 100644
--- a/Stream.cs
+++ b/Stream.cs
@@ -8,6 +8,9 @@
 
 namespace Libvirt
 {
+    /// <summary>
+    /// The Stream class expose all libvirt stream related functions
+    /// </summary>
     public class Stream
     {
         // TODO virStreamAbort
diff --git a/Types.cs b/Types.cs
index d45db75..19a36fc 100644
--- a/Types.cs
+++ b/Types.cs
@@ -140,7 +140,7 @@ namespace Libvirt
     /// the virError object
     /// </summary>
     [StructLayout(LayoutKind.Sequential)]
-    public struct Error
+    public class Error
     {
         /// <summary>
         /// The error code, a virErrorNumber.
@@ -155,7 +155,6 @@ namespace Libvirt
         /// <summary>
         /// Human-readable informative error message.
         /// </summary>
-        [MarshalAs(UnmanagedType.SysInt)]
         private IntPtr message;
         /// <summary>
         /// Human-readable informative error message.
@@ -173,17 +172,14 @@ namespace Libvirt
         /// <summary>
         /// Connection if available, deprecated see note above.
         /// </summary>
-        [MarshalAs(UnmanagedType.SysInt)]
         public IntPtr conn;
         /// <summary>
         /// Domain if available, deprecated see note above.
         /// </summary>
-        [MarshalAs(UnmanagedType.SysInt)]
         public IntPtr dom;
         /// <summary>
         /// Extra string information.
         /// </summary>
-        [MarshalAs(UnmanagedType.SysInt)]
         private IntPtr str1;
         /// <summary>
         /// Extra string information.
@@ -201,7 +197,6 @@ namespace Libvirt
         /// <summary>
         /// Extra string information.
         /// </summary>
-        [MarshalAs(UnmanagedType.SysInt)]
         private IntPtr str3;
         /// <summary>
         /// Extra string information.
@@ -220,7 +215,6 @@ namespace Libvirt
         /// <summary>
         /// Network if available, deprecated see note above.
         /// </summary>     
-        [MarshalAs(UnmanagedType.SysInt)]
         public IntPtr net;
     }
 
@@ -588,23 +582,25 @@ namespace Libvirt
         public uint threads;
     }
     /// <summary>
-    /// Structure tu handle domain informations
+    /// Structure to handle domain informations
     /// </summary>
     [StructLayout(LayoutKind.Sequential)]
-    public struct DomainInfo
+    public class DomainInfo
     {
         /// <summary>
         /// The running state, one of virDomainState.
         /// </summary>
-        public DomainState state;
+        private byte state;
         /// <summary>
         /// The maximum memory in KBytes allowed.
         /// </summary>
-        public ulong maxMem;
+        [MarshalAs(UnmanagedType.SysUInt)]
+        public UIntPtr maxMem;
         /// <summary>
         /// The memory in KBytes used by the domain.
         /// </summary>
-        public ulong memory;
+        [MarshalAs(UnmanagedType.SysUInt)]
+        public UIntPtr memory;
         /// <summary>
         /// The number of virtual CPUs for the domain.
         /// </summary>
@@ -612,7 +608,12 @@ namespace Libvirt
         /// <summary>
         /// The CPU time used in nanoseconds.
         /// </summary>
-        public ulong cpuTime;
+        [MarshalAs(UnmanagedType.SysUInt)]
+        public UIntPtr cpuTime;
+		/// <summary>
+        /// The running state, one of virDomainState.
+        /// </summary>
+		public DomainState State { get { return (DomainState)state; } }
     }
     #endregion
 
diff --git a/examples/MonoDevelop/virConnectSetErrorFunc/AssemblyInfo.cs b/examples/MonoDevelop/virConnectSetErrorFunc/AssemblyInfo.cs
new file mode 100644
index 0000000..0a74420
--- /dev/null
+++ b/examples/MonoDevelop/virConnectSetErrorFunc/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes. 
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("virConnectSetErrorFunc")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly, 
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/examples/MonoDevelop/virConnectSetErrorFunc/Main.cs b/examples/MonoDevelop/virConnectSetErrorFunc/Main.cs
new file mode 100644
index 0000000..6d0db12
--- /dev/null
+++ b/examples/MonoDevelop/virConnectSetErrorFunc/Main.cs
@@ -0,0 +1,17 @@
+using System;
+using Gtk;
+
+namespace virConnectSetErrorFunc
+{
+	class MainClass
+	{
+		public static void Main (string[] args)
+		{
+			Application.Init ();
+			MainWindow win = new MainWindow ();
+			win.Show ();
+			Application.Run ();
+		}
+	}
+}
+
diff --git a/examples/MonoDevelop/virConnectSetErrorFunc/MainWindow.cs b/examples/MonoDevelop/virConnectSetErrorFunc/MainWindow.cs
new file mode 100644
index 0000000..0b73143
--- /dev/null
+++ b/examples/MonoDevelop/virConnectSetErrorFunc/MainWindow.cs
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C)
+ *   Arnaud Champion <arnaud.champion@devatom.fr>
+ *   Jaromír Červenka <cervajz@cervajz.com>
+ *
+ * See COPYING.LIB for the License of this software
+ * 
+ * Sample code for :
+ * Functions :
+ *      Connect.OpenAuth
+ *		Domain.GetInfo
+ *      Domain.LookupByName
+ *		Errors.GetLastError
+ *      Errors.SetErrorFunc
+ * 
+ * Types :
+ *      DomainInfo
+ *      Error
+ *      
+ */
+
+using System;
+using Gtk;
+using Libvirt;
+
+public partial class MainWindow : Gtk.Window
+{
+	public MainWindow () : base(Gtk.WindowType.Toplevel)
+	{
+		Build ();
+	}
+
+	protected void OnDeleteEvent (object sender, DeleteEventArgs a)
+	{
+		Application.Quit ();
+		a.RetVal = true;
+	}
+	protected virtual void OnButton1Clicked (object sender, System.EventArgs e)
+	{
+		// Connect to the host
+		IntPtr conn = Connect.Open(entry1.Text);
+		if (conn != IntPtr.Zero)
+		{
+			// Set error callback. The method "ErrorCallback" will be called when error raised
+			Errors.SetErrorFunc(IntPtr.Zero, ErrorCallback);
+			// Try to look up the domain by name
+			IntPtr domain = Domain.LookupByName(conn, entry2.Text);
+            DomainInfo di = new DomainInfo();
+            Domain.GetInfo(domain, di);
+			entry3.Text = di.State.ToString();
+			entry4.Text = di.maxMem.ToString();
+			entry5.Text = di.memory.ToString();
+			entry6.Text = di.nrVirtCpu.ToString();
+			entry7.Text = di.cpuTime.ToString();
+		}
+		else
+		{
+			// Get the last error
+			Error err = Errors.GetLastError();
+			ShowError(err);
+		}
+	}
+	
+	private void ErrorCallback(IntPtr userData, Error error)
+    {
+        ShowError(error);
+    }
+	
+	private void ShowError(Error error)
+	{
+		MessageDialog errorMsg = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Close, error.Message);
+        errorMsg.Title = "Error";
+		if ((ResponseType) errorMsg.Run() == ResponseType.Close)
+		{ 
+        	errorMsg.Destroy(); 
+		}
+	}
+}
+
diff --git a/examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/MainWindow.cs b/examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/MainWindow.cs
new file mode 100644
index 0000000..74d5abe
--- /dev/null
+++ b/examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/MainWindow.cs
@@ -0,0 +1,260 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+
+public partial class MainWindow
+{
+	private global::Gtk.Table table1;
+
+	private global::Gtk.Button button1;
+
+	private global::Gtk.Entry entry1;
+
+	private global::Gtk.Entry entry2;
+
+	private global::Gtk.Frame frame1;
+
+	private global::Gtk.Alignment GtkAlignment;
+
+	private global::Gtk.Table table2;
+
+	private global::Gtk.Entry entry3;
+
+	private global::Gtk.Entry entry4;
+
+	private global::Gtk.Entry entry5;
+
+	private global::Gtk.Entry entry6;
+
+	private global::Gtk.Entry entry7;
+
+	private global::Gtk.Label label3;
+
+	private global::Gtk.Label label4;
+
+	private global::Gtk.Label label5;
+
+	private global::Gtk.Label label6;
+
+	private global::Gtk.Label label7;
+
+	private global::Gtk.Label GtkLabel1;
+
+	private global::Gtk.Label label1;
+
+	private global::Gtk.Label label2;
+
+	protected virtual void Build ()
+	{
+		global::Stetic.Gui.Initialize (this);
+		// Widget MainWindow
+		this.Name = "MainWindow";
+		this.Title = global::Mono.Unix.Catalog.GetString ("MainWindow");
+		this.WindowPosition = ((global::Gtk.WindowPosition)(4));
+		// Container child MainWindow.Gtk.Container+ContainerChild
+		this.table1 = new global::Gtk.Table (((uint)(4)), ((uint)(2)), false);
+		this.table1.Name = "table1";
+		this.table1.RowSpacing = ((uint)(6));
+		this.table1.ColumnSpacing = ((uint)(6));
+		// Container child table1.Gtk.Table+TableChild
+		this.button1 = new global::Gtk.Button ();
+		this.button1.CanFocus = true;
+		this.button1.Name = "button1";
+		this.button1.UseUnderline = true;
+		this.button1.Label = global::Mono.Unix.Catalog.GetString ("Connect and get domain infos");
+		this.table1.Add (this.button1);
+		global::Gtk.Table.TableChild w1 = ((global::Gtk.Table.TableChild)(this.table1[this.button1]));
+		w1.TopAttach = ((uint)(2));
+		w1.BottomAttach = ((uint)(3));
+		w1.LeftAttach = ((uint)(1));
+		w1.RightAttach = ((uint)(2));
+		w1.XOptions = ((global::Gtk.AttachOptions)(4));
+		w1.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table1.Gtk.Table+TableChild
+		this.entry1 = new global::Gtk.Entry ();
+		this.entry1.CanFocus = true;
+		this.entry1.Name = "entry1";
+		this.entry1.Text = global::Mono.Unix.Catalog.GetString ("qemu+tcp://192.168.220.198/session");
+		this.entry1.IsEditable = true;
+		this.table1.Add (this.entry1);
+		global::Gtk.Table.TableChild w2 = ((global::Gtk.Table.TableChild)(this.table1[this.entry1]));
+		w2.LeftAttach = ((uint)(1));
+		w2.RightAttach = ((uint)(2));
+		w2.XOptions = ((global::Gtk.AttachOptions)(4));
+		w2.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table1.Gtk.Table+TableChild
+		this.entry2 = new global::Gtk.Entry ();
+		this.entry2.CanFocus = true;
+		this.entry2.Name = "entry2";
+		this.entry2.Text = global::Mono.Unix.Catalog.GetString ("test");
+		this.entry2.IsEditable = true;
+		this.table1.Add (this.entry2);
+		global::Gtk.Table.TableChild w3 = ((global::Gtk.Table.TableChild)(this.table1[this.entry2]));
+		w3.TopAttach = ((uint)(1));
+		w3.BottomAttach = ((uint)(2));
+		w3.LeftAttach = ((uint)(1));
+		w3.RightAttach = ((uint)(2));
+		w3.XOptions = ((global::Gtk.AttachOptions)(4));
+		w3.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table1.Gtk.Table+TableChild
+		this.frame1 = new global::Gtk.Frame ();
+		this.frame1.Name = "frame1";
+		this.frame1.ShadowType = ((global::Gtk.ShadowType)(0));
+		// Container child frame1.Gtk.Container+ContainerChild
+		this.GtkAlignment = new global::Gtk.Alignment (0f, 0f, 1f, 1f);
+		this.GtkAlignment.Name = "GtkAlignment";
+		this.GtkAlignment.LeftPadding = ((uint)(12));
+		// Container child GtkAlignment.Gtk.Container+ContainerChild
+		this.table2 = new global::Gtk.Table (((uint)(5)), ((uint)(2)), false);
+		this.table2.Name = "table2";
+		this.table2.RowSpacing = ((uint)(6));
+		this.table2.ColumnSpacing = ((uint)(6));
+		// Container child table2.Gtk.Table+TableChild
+		this.entry3 = new global::Gtk.Entry ();
+		this.entry3.CanFocus = true;
+		this.entry3.Name = "entry3";
+		this.entry3.IsEditable = false;
+		this.table2.Add (this.entry3);
+		global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.table2[this.entry3]));
+		w4.LeftAttach = ((uint)(1));
+		w4.RightAttach = ((uint)(2));
+		w4.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table2.Gtk.Table+TableChild
+		this.entry4 = new global::Gtk.Entry ();
+		this.entry4.CanFocus = true;
+		this.entry4.Name = "entry4";
+		this.entry4.IsEditable = false;
+		this.table2.Add (this.entry4);
+		global::Gtk.Table.TableChild w5 = ((global::Gtk.Table.TableChild)(this.table2[this.entry4]));
+		w5.TopAttach = ((uint)(1));
+		w5.BottomAttach = ((uint)(2));
+		w5.LeftAttach = ((uint)(1));
+		w5.RightAttach = ((uint)(2));
+		w5.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table2.Gtk.Table+TableChild
+		this.entry5 = new global::Gtk.Entry ();
+		this.entry5.CanFocus = true;
+		this.entry5.Name = "entry5";
+		this.entry5.IsEditable = false;
+		this.table2.Add (this.entry5);
+		global::Gtk.Table.TableChild w6 = ((global::Gtk.Table.TableChild)(this.table2[this.entry5]));
+		w6.TopAttach = ((uint)(2));
+		w6.BottomAttach = ((uint)(3));
+		w6.LeftAttach = ((uint)(1));
+		w6.RightAttach = ((uint)(2));
+		w6.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table2.Gtk.Table+TableChild
+		this.entry6 = new global::Gtk.Entry ();
+		this.entry6.CanFocus = true;
+		this.entry6.Name = "entry6";
+		this.entry6.IsEditable = false;
+		this.table2.Add (this.entry6);
+		global::Gtk.Table.TableChild w7 = ((global::Gtk.Table.TableChild)(this.table2[this.entry6]));
+		w7.TopAttach = ((uint)(3));
+		w7.BottomAttach = ((uint)(4));
+		w7.LeftAttach = ((uint)(1));
+		w7.RightAttach = ((uint)(2));
+		w7.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table2.Gtk.Table+TableChild
+		this.entry7 = new global::Gtk.Entry ();
+		this.entry7.CanFocus = true;
+		this.entry7.Name = "entry7";
+		this.entry7.IsEditable = false;
+		this.table2.Add (this.entry7);
+		global::Gtk.Table.TableChild w8 = ((global::Gtk.Table.TableChild)(this.table2[this.entry7]));
+		w8.TopAttach = ((uint)(4));
+		w8.BottomAttach = ((uint)(5));
+		w8.LeftAttach = ((uint)(1));
+		w8.RightAttach = ((uint)(2));
+		w8.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table2.Gtk.Table+TableChild
+		this.label3 = new global::Gtk.Label ();
+		this.label3.Name = "label3";
+		this.label3.LabelProp = global::Mono.Unix.Catalog.GetString ("State :");
+		this.table2.Add (this.label3);
+		global::Gtk.Table.TableChild w9 = ((global::Gtk.Table.TableChild)(this.table2[this.label3]));
+		w9.XOptions = ((global::Gtk.AttachOptions)(4));
+		w9.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table2.Gtk.Table+TableChild
+		this.label4 = new global::Gtk.Label ();
+		this.label4.Name = "label4";
+		this.label4.LabelProp = global::Mono.Unix.Catalog.GetString ("Maximum memory in Kb :");
+		this.table2.Add (this.label4);
+		global::Gtk.Table.TableChild w10 = ((global::Gtk.Table.TableChild)(this.table2[this.label4]));
+		w10.TopAttach = ((uint)(1));
+		w10.BottomAttach = ((uint)(2));
+		w10.XOptions = ((global::Gtk.AttachOptions)(4));
+		w10.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table2.Gtk.Table+TableChild
+		this.label5 = new global::Gtk.Label ();
+		this.label5.Name = "label5";
+		this.label5.LabelProp = global::Mono.Unix.Catalog.GetString ("Memory in Kb :");
+		this.table2.Add (this.label5);
+		global::Gtk.Table.TableChild w11 = ((global::Gtk.Table.TableChild)(this.table2[this.label5]));
+		w11.TopAttach = ((uint)(2));
+		w11.BottomAttach = ((uint)(3));
+		w11.XOptions = ((global::Gtk.AttachOptions)(4));
+		w11.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table2.Gtk.Table+TableChild
+		this.label6 = new global::Gtk.Label ();
+		this.label6.Name = "label6";
+		this.label6.LabelProp = global::Mono.Unix.Catalog.GetString ("Number of VCPU :");
+		this.table2.Add (this.label6);
+		global::Gtk.Table.TableChild w12 = ((global::Gtk.Table.TableChild)(this.table2[this.label6]));
+		w12.TopAttach = ((uint)(3));
+		w12.BottomAttach = ((uint)(4));
+		w12.XOptions = ((global::Gtk.AttachOptions)(4));
+		w12.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table2.Gtk.Table+TableChild
+		this.label7 = new global::Gtk.Label ();
+		this.label7.Name = "label7";
+		this.label7.LabelProp = global::Mono.Unix.Catalog.GetString ("CPU time in ns :");
+		this.table2.Add (this.label7);
+		global::Gtk.Table.TableChild w13 = ((global::Gtk.Table.TableChild)(this.table2[this.label7]));
+		w13.TopAttach = ((uint)(4));
+		w13.BottomAttach = ((uint)(5));
+		w13.XOptions = ((global::Gtk.AttachOptions)(4));
+		w13.YOptions = ((global::Gtk.AttachOptions)(4));
+		this.GtkAlignment.Add (this.table2);
+		this.frame1.Add (this.GtkAlignment);
+		this.GtkLabel1 = new global::Gtk.Label ();
+		this.GtkLabel1.Name = "GtkLabel1";
+		this.GtkLabel1.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Domain Infos</b>");
+		this.GtkLabel1.UseMarkup = true;
+		this.frame1.LabelWidget = this.GtkLabel1;
+		this.table1.Add (this.frame1);
+		global::Gtk.Table.TableChild w16 = ((global::Gtk.Table.TableChild)(this.table1[this.frame1]));
+		w16.TopAttach = ((uint)(3));
+		w16.BottomAttach = ((uint)(4));
+		w16.LeftAttach = ((uint)(1));
+		w16.RightAttach = ((uint)(2));
+		w16.XOptions = ((global::Gtk.AttachOptions)(4));
+		w16.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table1.Gtk.Table+TableChild
+		this.label1 = new global::Gtk.Label ();
+		this.label1.Name = "label1";
+		this.label1.LabelProp = global::Mono.Unix.Catalog.GetString ("URI :");
+		this.table1.Add (this.label1);
+		global::Gtk.Table.TableChild w17 = ((global::Gtk.Table.TableChild)(this.table1[this.label1]));
+		w17.XOptions = ((global::Gtk.AttachOptions)(4));
+		w17.YOptions = ((global::Gtk.AttachOptions)(4));
+		// Container child table1.Gtk.Table+TableChild
+		this.label2 = new global::Gtk.Label ();
+		this.label2.Name = "label2";
+		this.label2.LabelProp = global::Mono.Unix.Catalog.GetString ("Domain name to look up :");
+		this.table1.Add (this.label2);
+		global::Gtk.Table.TableChild w18 = ((global::Gtk.Table.TableChild)(this.table1[this.label2]));
+		w18.TopAttach = ((uint)(1));
+		w18.BottomAttach = ((uint)(2));
+		w18.XOptions = ((global::Gtk.AttachOptions)(4));
+		w18.YOptions = ((global::Gtk.AttachOptions)(4));
+		this.Add (this.table1);
+		if ((this.Child != null)) {
+			this.Child.ShowAll ();
+		}
+		this.DefaultWidth = 480;
+		this.DefaultHeight = 282;
+		this.Show ();
+		this.DeleteEvent += new global::Gtk.DeleteEventHandler (this.OnDeleteEvent);
+		this.button1.Clicked += new global::System.EventHandler (this.OnButton1Clicked);
+	}
+}
diff --git a/examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/generated.cs b/examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/generated.cs
new file mode 100644
index 0000000..8463caa
--- /dev/null
+++ b/examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/generated.cs
@@ -0,0 +1,29 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace Stetic
+{
+	internal class Gui
+	{
+		private static bool initialized;
+
+		static internal void Initialize (Gtk.Widget iconRenderer)
+		{
+			if ((Stetic.Gui.initialized == false)) {
+				Stetic.Gui.initialized = true;
+			}
+		}
+	}
+
+	internal class ActionGroups
+	{
+		public static Gtk.ActionGroup GetActionGroup (System.Type type)
+		{
+			return Stetic.ActionGroups.GetActionGroup (type.FullName);
+		}
+
+		public static Gtk.ActionGroup GetActionGroup (string name)
+		{
+			return null;
+		}
+	}
+}
diff --git a/examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/gui.stetic b/examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/gui.stetic
new file mode 100644
index 0000000..0910f7b
--- /dev/null
+++ b/examples/MonoDevelop/virConnectSetErrorFunc/gtk-gui/gui.stetic
@@ -0,0 +1,381 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<stetic-interface>
+  <configuration>
+    <images-root-path>..</images-root-path>
+    <target-gtk-version>2.12</target-gtk-version>
+  </configuration>
+  <import>
+    <widget-library name="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <widget-library name="..\bin\Debug\virConnectSetErrorFunc.exe" internal="true" />
+  </import>
+  <widget class="Gtk.Window" id="MainWindow" design-size="480 282">
+    <property name="MemberName" />
+    <property name="Title" translatable="yes">MainWindow</property>
+    <property name="WindowPosition">CenterOnParent</property>
+    <signal name="DeleteEvent" handler="OnDeleteEvent" />
+    <child>
+      <widget class="Gtk.Table" id="table1">
+        <property name="MemberName" />
+        <property name="NRows">4</property>
+        <property name="NColumns">2</property>
+        <property name="RowSpacing">6</property>
+        <property name="ColumnSpacing">6</property>
+        <child>
+          <placeholder />
+        </child>
+        <child>
+          <placeholder />
+        </child>
+        <child>
+          <widget class="Gtk.Button" id="button1">
+            <property name="MemberName" />
+            <property name="CanFocus">True</property>
+            <property name="Type">TextOnly</property>
+            <property name="Label" translatable="yes">Connect and get domain infos</property>
+            <property name="UseUnderline">True</property>
+            <signal name="Clicked" handler="OnButton1Clicked" />
+          </widget>
+          <packing>
+            <property name="TopAttach">2</property>
+            <property name="BottomAttach">3</property>
+            <property name="LeftAttach">1</property>
+            <property name="RightAttach">2</property>
+            <property name="AutoSize">True</property>
+            <property name="XOptions">Fill</property>
+            <property name="YOptions">Fill</property>
+            <property name="XExpand">False</property>
+            <property name="XFill">True</property>
+            <property name="XShrink">False</property>
+            <property name="YExpand">False</property>
+            <property name="YFill">True</property>
+            <property name="YShrink">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Entry" id="entry1">
+            <property name="MemberName" />
+            <property name="CanFocus">True</property>
+            <property name="Text" translatable="yes">qemu+tcp://192.168.220.198/session</property>
+            <property name="IsEditable">True</property>
+          </widget>
+          <packing>
+            <property name="LeftAttach">1</property>
+            <property name="RightAttach">2</property>
+            <property name="AutoSize">True</property>
+            <property name="XOptions">Fill</property>
+            <property name="YOptions">Fill</property>
+            <property name="XExpand">False</property>
+            <property name="XFill">True</property>
+            <property name="XShrink">False</property>
+            <property name="YExpand">False</property>
+            <property name="YFill">True</property>
+            <property name="YShrink">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Entry" id="entry2">
+            <property name="MemberName" />
+            <property name="CanFocus">True</property>
+            <property name="Text" translatable="yes">test</property>
+            <property name="IsEditable">True</property>
+          </widget>
+          <packing>
+            <property name="TopAttach">1</property>
+            <property name="BottomAttach">2</property>
+            <property name="LeftAttach">1</property>
+            <property name="RightAttach">2</property>
+            <property name="AutoSize">True</property>
+            <property name="XOptions">Fill</property>
+            <property name="YOptions">Fill</property>
+            <property name="XExpand">False</property>
+            <property name="XFill">True</property>
+            <property name="XShrink">False</property>
+            <property name="YExpand">False</property>
+            <property name="YFill">True</property>
+            <property name="YShrink">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Frame" id="frame1">
+            <property name="MemberName" />
+            <property name="ShadowType">None</property>
+            <child>
+              <widget class="Gtk.Alignment" id="GtkAlignment">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="Yalign">0</property>
+                <property name="LeftPadding">12</property>
+                <child>
+                  <widget class="Gtk.Table" id="table2">
+                    <property name="MemberName" />
+                    <property name="NRows">5</property>
+                    <property name="NColumns">2</property>
+                    <property name="RowSpacing">6</property>
+                    <property name="ColumnSpacing">6</property>
+                    <child>
+                      <widget class="Gtk.Entry" id="entry3">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="IsEditable">False</property>
+                      </widget>
+                      <packing>
+                        <property name="LeftAttach">1</property>
+                        <property name="RightAttach">2</property>
+                        <property name="AutoSize">True</property>
+                        <property name="YOptions">Fill</property>
+                        <property name="XExpand">True</property>
+                        <property name="XFill">True</property>
+                        <property name="XShrink">False</property>
+                        <property name="YExpand">False</property>
+                        <property name="YFill">True</property>
+                        <property name="YShrink">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Entry" id="entry4">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="IsEditable">False</property>
+                      </widget>
+                      <packing>
+                        <property name="TopAttach">1</property>
+                        <property name="BottomAttach">2</property>
+                        <property name="LeftAttach">1</property>
+                        <property name="RightAttach">2</property>
+                        <property name="AutoSize">True</property>
+                        <property name="YOptions">Fill</property>
+                        <property name="XExpand">True</property>
+                        <property name="XFill">True</property>
+                        <property name="XShrink">False</property>
+                        <property name="YExpand">False</property>
+                        <property name="YFill">True</property>
+                        <property name="YShrink">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Entry" id="entry5">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="IsEditable">False</property>
+                      </widget>
+                      <packing>
+                        <property name="TopAttach">2</property>
+                        <property name="BottomAttach">3</property>
+                        <property name="LeftAttach">1</property>
+                        <property name="RightAttach">2</property>
+                        <property name="AutoSize">True</property>
+                        <property name="YOptions">Fill</property>
+                        <property name="XExpand">True</property>
+                        <property name="XFill">True</property>
+                        <property name="XShrink">False</property>
+                        <property name="YExpand">False</property>
+                        <property name="YFill">True</property>
+                        <property name="YShrink">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Entry" id="entry6">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="IsEditable">False</property>
+                      </widget>
+                      <packing>
+                        <property name="TopAttach">3</property>
+                        <property name="BottomAttach">4</property>
+                        <property name="LeftAttach">1</property>
+                        <property name="RightAttach">2</property>
+                        <property name="AutoSize">True</property>
+                        <property name="YOptions">Fill</property>
+                        <property name="XExpand">True</property>
+                        <property name="XFill">True</property>
+                        <property name="XShrink">False</property>
+                        <property name="YExpand">False</property>
+                        <property name="YFill">True</property>
+                        <property name="YShrink">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Entry" id="entry7">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="IsEditable">False</property>
+                      </widget>
+                      <packing>
+                        <property name="TopAttach">4</property>
+                        <property name="BottomAttach">5</property>
+                        <property name="LeftAttach">1</property>
+                        <property name="RightAttach">2</property>
+                        <property name="AutoSize">True</property>
+                        <property name="YOptions">Fill</property>
+                        <property name="XExpand">True</property>
+                        <property name="XFill">True</property>
+                        <property name="XShrink">False</property>
+                        <property name="YExpand">False</property>
+                        <property name="YFill">True</property>
+                        <property name="YShrink">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="label3">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">State :</property>
+                      </widget>
+                      <packing>
+                        <property name="AutoSize">True</property>
+                        <property name="XOptions">Fill</property>
+                        <property name="YOptions">Fill</property>
+                        <property name="XExpand">False</property>
+                        <property name="XFill">True</property>
+                        <property name="XShrink">False</property>
+                        <property name="YExpand">False</property>
+                        <property name="YFill">True</property>
+                        <property name="YShrink">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="label4">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">Maximum memory in Kb :</property>
+                      </widget>
+                      <packing>
+                        <property name="TopAttach">1</property>
+                        <property name="BottomAttach">2</property>
+                        <property name="AutoSize">True</property>
+                        <property name="XOptions">Fill</property>
+                        <property name="YOptions">Fill</property>
+                        <property name="XExpand">False</property>
+                        <property name="XFill">True</property>
+                        <property name="XShrink">False</property>
+                        <property name="YExpand">False</property>
+                        <property name="YFill">True</property>
+                        <property name="YShrink">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="label5">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">Memory in Kb :</property>
+                      </widget>
+                      <packing>
+                        <property name="TopAttach">2</property>
+                        <property name="BottomAttach">3</property>
+                        <property name="AutoSize">True</property>
+                        <property name="XOptions">Fill</property>
+                        <property name="YOptions">Fill</property>
+                        <property name="XExpand">False</property>
+                        <property name="XFill">True</property>
+                        <property name="XShrink">False</property>
+                        <property name="YExpand">False</property>
+                        <property name="YFill">True</property>
+                        <property name="YShrink">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="label6">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">Number of VCPU :</property>
+                      </widget>
+                      <packing>
+                        <property name="TopAttach">3</property>
+                        <property name="BottomAttach">4</property>
+                        <property name="AutoSize">True</property>
+                        <property name="XOptions">Fill</property>
+                        <property name="YOptions">Fill</property>
+                        <property name="XExpand">False</property>
+                        <property name="XFill">True</property>
+                        <property name="XShrink">False</property>
+                        <property name="YExpand">False</property>
+                        <property name="YFill">True</property>
+                        <property name="YShrink">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="label7">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">CPU time in ns :</property>
+                      </widget>
+                      <packing>
+                        <property name="TopAttach">4</property>
+                        <property name="BottomAttach">5</property>
+                        <property name="AutoSize">True</property>
+                        <property name="XOptions">Fill</property>
+                        <property name="YOptions">Fill</property>
+                        <property name="XExpand">False</property>
+                        <property name="XFill">True</property>
+                        <property name="XShrink">False</property>
+                        <property name="YExpand">False</property>
+                        <property name="YFill">True</property>
+                        <property name="YShrink">False</property>
+                      </packing>
+                    </child>
+                  </widget>
+                </child>
+              </widget>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="GtkLabel1">
+                <property name="MemberName" />
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Domain Infos&lt;/b&gt;</property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="type">label_item</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="TopAttach">3</property>
+            <property name="BottomAttach">4</property>
+            <property name="LeftAttach">1</property>
+            <property name="RightAttach">2</property>
+            <property name="AutoSize">True</property>
+            <property name="XOptions">Fill</property>
+            <property name="YOptions">Fill</property>
+            <property name="XExpand">False</property>
+            <property name="XFill">True</property>
+            <property name="XShrink">False</property>
+            <property name="YExpand">False</property>
+            <property name="YFill">True</property>
+            <property name="YShrink">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Label" id="label1">
+            <property name="MemberName" />
+            <property name="LabelProp" translatable="yes">URI :</property>
+          </widget>
+          <packing>
+            <property name="AutoSize">True</property>
+            <property name="XOptions">Fill</property>
+            <property name="YOptions">Fill</property>
+            <property name="XExpand">False</property>
+            <property name="XFill">True</property>
+            <property name="XShrink">False</property>
+            <property name="YExpand">False</property>
+            <property name="YFill">True</property>
+            <property name="YShrink">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Label" id="label2">
+            <property name="MemberName" />
+            <property name="LabelProp" translatable="yes">Domain name to look up :</property>
+          </widget>
+          <packing>
+            <property name="TopAttach">1</property>
+            <property name="BottomAttach">2</property>
+            <property name="AutoSize">True</property>
+            <property name="XOptions">Fill</property>
+            <property name="YOptions">Fill</property>
+            <property name="XExpand">False</property>
+            <property name="XFill">True</property>
+            <property name="XShrink">False</property>
+            <property name="YExpand">False</property>
+            <property name="YFill">True</property>
+            <property name="YShrink">False</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</stetic-interface>
\ No newline at end of file
diff --git a/examples/MonoDevelop/virConnectSetErrorFunc/virConnectSetErrorFunc.csproj b/examples/MonoDevelop/virConnectSetErrorFunc/virConnectSetErrorFunc.csproj
new file mode 100644
index 0000000..5a9715e
--- /dev/null
+++ b/examples/MonoDevelop/virConnectSetErrorFunc/virConnectSetErrorFunc.csproj
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.21022</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{243DD685-9AB3-4CD0-93D5-92034C1D97D8}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <RootNamespace>virConnectSetErrorFunc</RootNamespace>
    <AssemblyName>virConnectSetErrorFunc</AssemblyName>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug</OutputPath>
    <DefineConstants>DEBUG</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <ConsolePause>false</ConsolePause>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>none</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Release</OutputPath>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <ConsolePause>false</ConsolePause>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="Mono.Posix" />
    <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
    <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
    <Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
    <Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Include="gtk-gui\gui.stetic">
      <LogicalName>gui.stetic</LogicalName>
    </EmbeddedResource>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="gtk-gui\generated.cs" />
    <Compile Include="MainWindow.cs" />
    <Compile Include="gtk-gui\MainWindow.cs" />
    <Compile Include="Main.cs" />
    <Compile Include="AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\..\..\projects\MonoDevelop\LibvirtBindings.csproj">
      <Project>{C51C70EB-9040-4F8E-9A18-DF2A77D04A37}</Project>
      <Name>LibvirtBindings</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
diff --git a/examples/MonoDevelop/virEventRegisterImpl/gtk-gui/MainWindow.cs b/examples/MonoDevelop/virEventRegisterImpl/gtk-gui/MainWindow.cs
index 96432ba..6f26082 100644
--- a/examples/MonoDevelop/virEventRegisterImpl/gtk-gui/MainWindow.cs
+++ b/examples/MonoDevelop/virEventRegisterImpl/gtk-gui/MainWindow.cs
@@ -59,7 +59,6 @@ public partial class MainWindow
 		this.GtkScrolledWindow.ShadowType = ((global::Gtk.ShadowType)(1));
 		// Container child GtkScrolledWindow.Gtk.Container+ContainerChild
 		this.textview1 = new global::Gtk.TextView ();
-		this.textview1.Buffer.Text = "test";
 		this.textview1.CanFocus = true;
 		this.textview1.Name = "textview1";
 		this.GtkScrolledWindow.Add (this.textview1);
diff --git a/examples/MonoDevelop/virEventRegisterImpl/virEventRegisterImpl.csproj b/examples/MonoDevelop/virEventRegisterImpl/virEventRegisterImpl.csproj
dissimilarity index 100%
index f6cbf5b..13eaf7f 100644
--- a/examples/MonoDevelop/virEventRegisterImpl/virEventRegisterImpl.csproj
+++ b/examples/MonoDevelop/virEventRegisterImpl/virEventRegisterImpl.csproj
@@ -1 +1,61 @@
-<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.21022</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{4576BB61-F143-4BC8-BD1D-D50F710CEA10}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <RootNamespace>virEventRegisterImpl</RootNamespace>
    <AssemblyName>virEventRegisterImpl</AssemblyName>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug</OutputPath>
    <DefineConstants>DEBUG</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <ConsolePause>false</ConsolePause>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>none</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Release</OutputPath>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <ConsolePause>false</ConsolePause>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="Mono.Posix" />
    <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
    <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
    <Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
    <Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Include="gtk-gui\gui.stetic">
      <LogicalName>gui.stetic</LogicalName>
    </EmbeddedResource>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="gtk-gui\generated.cs" />
    <Compile Include="MainWindow.cs" />
    <Compile Include="gtk-gui\MainWindow.cs" />
    <Compile Include="Main.cs" />
    <Compile Include="AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\..\..\projects\MonoDevelop\LibvirtBindings.csproj">
      <Project>{C51C70EB-9040-4F8E-9A18-DF2A77D04A37}</Project>
      <Name>LibvirtBindings</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>\ No newline at end of file
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{4576BB61-F143-4BC8-BD1D-D50F710CEA10}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>virEventRegisterImpl</RootNamespace>
+    <AssemblyName>virEventRegisterImpl</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug</OutputPath>
+    <DefineConstants>DEBUG</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>none</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Release</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="Mono.Posix" />
+    <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="gtk-gui\gui.stetic">
+      <LogicalName>gui.stetic</LogicalName>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="gtk-gui\generated.cs" />
+    <Compile Include="MainWindow.cs" />
+    <Compile Include="gtk-gui\MainWindow.cs" />
+    <Compile Include="Main.cs" />
+    <Compile Include="AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\projects\MonoDevelop\LibvirtBindings.csproj">
+      <Project>{C51C70EB-9040-4F8E-9A18-DF2A77D04A37}</Project>
+      <Name>LibvirtBindings</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+</Project>\ No newline at end of file
diff --git a/examples/VisualStudio/virConnectSetErrorFunc/Form1.Designer.cs b/examples/VisualStudio/virConnectSetErrorFunc/Form1.Designer.cs
new file mode 100644
index 0000000..2ebb001
--- /dev/null
+++ b/examples/VisualStudio/virConnectSetErrorFunc/Form1.Designer.cs
@@ -0,0 +1,237 @@
+﻿namespace virConnectSetErrorFunc
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Variable nécessaire au concepteur.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Nettoyage des ressources utilisées.
+        /// </summary>
+        /// <param name="disposing">true si les ressources managées doivent être supprimées ; sinon, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Code généré par le Concepteur Windows Form
+
+        /// <summary>
+        /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
+        /// le contenu de cette méthode avec l'éditeur de code.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.tbURI = new System.Windows.Forms.TextBox();
+            this.btnConnect = new System.Windows.Forms.Button();
+            this.label2 = new System.Windows.Forms.Label();
+            this.tbDomainName = new System.Windows.Forms.TextBox();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.textBox1 = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.textBox2 = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.textBox3 = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.textBox4 = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.textBox5 = new System.Windows.Forms.TextBox();
+            this.label7 = new System.Windows.Forms.Label();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 15);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(32, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "URI :";
+            // 
+            // tbURI
+            // 
+            this.tbURI.Location = new System.Drawing.Point(50, 12);
+            this.tbURI.Name = "tbURI";
+            this.tbURI.Size = new System.Drawing.Size(195, 20);
+            this.tbURI.TabIndex = 1;
+            this.tbURI.Text = "qemu+tcp://192.168.220.198/session";
+            // 
+            // btnConnect
+            // 
+            this.btnConnect.Location = new System.Drawing.Point(93, 64);
+            this.btnConnect.Name = "btnConnect";
+            this.btnConnect.Size = new System.Drawing.Size(152, 23);
+            this.btnConnect.TabIndex = 2;
+            this.btnConnect.Text = "Connect / Get domain infos";
+            this.btnConnect.UseVisualStyleBackColor = true;
+            this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(12, 41);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(128, 13);
+            this.label2.TabIndex = 3;
+            this.label2.Text = "Domain name to look up :";
+            // 
+            // tbDomainName
+            // 
+            this.tbDomainName.Location = new System.Drawing.Point(150, 38);
+            this.tbDomainName.Name = "tbDomainName";
+            this.tbDomainName.Size = new System.Drawing.Size(95, 20);
+            this.tbDomainName.TabIndex = 4;
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Controls.Add(this.label7);
+            this.groupBox1.Controls.Add(this.textBox5);
+            this.groupBox1.Controls.Add(this.label6);
+            this.groupBox1.Controls.Add(this.textBox4);
+            this.groupBox1.Controls.Add(this.label5);
+            this.groupBox1.Controls.Add(this.textBox3);
+            this.groupBox1.Controls.Add(this.label4);
+            this.groupBox1.Controls.Add(this.textBox2);
+            this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Controls.Add(this.textBox1);
+            this.groupBox1.Location = new System.Drawing.Point(15, 93);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(230, 151);
+            this.groupBox1.TabIndex = 5;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Domain infos";
+            // 
+            // textBox1
+            // 
+            this.textBox1.Location = new System.Drawing.Point(60, 19);
+            this.textBox1.Name = "textBox1";
+            this.textBox1.ReadOnly = true;
+            this.textBox1.Size = new System.Drawing.Size(164, 20);
+            this.textBox1.TabIndex = 0;
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(6, 22);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(36, 13);
+            this.label3.TabIndex = 1;
+            this.label3.Text = "state :";
+            // 
+            // textBox2
+            // 
+            this.textBox2.Location = new System.Drawing.Point(135, 45);
+            this.textBox2.Name = "textBox2";
+            this.textBox2.ReadOnly = true;
+            this.textBox2.Size = new System.Drawing.Size(89, 20);
+            this.textBox2.TabIndex = 2;
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(6, 48);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(123, 13);
+            this.label4.TabIndex = 3;
+            this.label4.Text = "Maximum memory in Kb :";
+            // 
+            // textBox3
+            // 
+            this.textBox3.Location = new System.Drawing.Point(135, 71);
+            this.textBox3.Name = "textBox3";
+            this.textBox3.ReadOnly = true;
+            this.textBox3.Size = new System.Drawing.Size(89, 20);
+            this.textBox3.TabIndex = 4;
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(6, 74);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(77, 13);
+            this.label5.TabIndex = 5;
+            this.label5.Text = "Memory in Kb :";
+            // 
+            // textBox4
+            // 
+            this.textBox4.Location = new System.Drawing.Point(135, 97);
+            this.textBox4.Name = "textBox4";
+            this.textBox4.ReadOnly = true;
+            this.textBox4.Size = new System.Drawing.Size(89, 20);
+            this.textBox4.TabIndex = 6;
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(6, 100);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(94, 13);
+            this.label6.TabIndex = 7;
+            this.label6.Text = "Number of VCPU :";
+            // 
+            // textBox5
+            // 
+            this.textBox5.Location = new System.Drawing.Point(135, 123);
+            this.textBox5.Name = "textBox5";
+            this.textBox5.ReadOnly = true;
+            this.textBox5.Size = new System.Drawing.Size(89, 20);
+            this.textBox5.TabIndex = 8;
+            // 
+            // label7
+            // 
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(6, 126);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(82, 13);
+            this.label7.TabIndex = 9;
+            this.label7.Text = "CPU time in ns :";
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(262, 260);
+            this.Controls.Add(this.groupBox1);
+            this.Controls.Add(this.tbDomainName);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.btnConnect);
+            this.Controls.Add(this.tbURI);
+            this.Controls.Add(this.label1);
+            this.Name = "Form1";
+            this.Text = "Form1";
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox tbURI;
+        private System.Windows.Forms.Button btnConnect;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox tbDomainName;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox textBox1;
+        private System.Windows.Forms.TextBox textBox2;
+        private System.Windows.Forms.TextBox textBox3;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox textBox4;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.TextBox textBox5;
+    }
+}
+
diff --git a/examples/VisualStudio/virConnectSetErrorFunc/Form1.cs b/examples/VisualStudio/virConnectSetErrorFunc/Form1.cs
new file mode 100644
index 0000000..f7ce360
--- /dev/null
+++ b/examples/VisualStudio/virConnectSetErrorFunc/Form1.cs
@@ -0,0 +1,50 @@
+﻿/*
 * Copyright (C)
 *   Arnaud Champion <arnaud.champion@devatom.fr>
 *   Jaromír Červenka <cervajz@cervajz.com>
 *
 * See COPYING.LIB for the License of this software
 * 
 * Sample code for :
 * Functions :
 *      Connect.OpenAuth
 *		Domain.GetInfo
 *      Domain.LookupByName
 *		Errors.GetLastError
 *      Errors.SetErrorFunc
 * 
 * Types :
 *      DomainInfo
 *      Error
 *      
 */
+
+using System;
+using System.Windows.Forms;
+using Libvirt;
+
+namespace virConnectSetErrorFunc
+{
+    public partial class Form1 : Form
+    {
+        public Form1()
+        {
+            InitializeComponent();
+        }
+
+        private void btnConnect_Click(object sender, EventArgs e)
+        {
+            IntPtr conn = Connect.Open(tbURI.Text);
+
+            if (conn != IntPtr.Zero)
+            {
+                Errors.SetErrorFunc(IntPtr.Zero, ErrorCallback);
+                IntPtr domain = Domain.LookupByName(conn, tbDomainName.Text);
+                DomainInfo di = new DomainInfo();
+                Domain.GetInfo(domain, di);
+                textBox1.Text = di.State.ToString();
+                textBox2.Text = di.maxMem.ToString();
+                textBox3.Text = di.memory.ToString();
+                textBox4.Text = di.nrVirtCpu.ToString();
+                textBox5.Text = di.cpuTime.ToString();
+            }
+            else
+            {
+                Error error = Errors.GetLastError();
+                ShowError(error);
+            }
+        }
+
+        private void ErrorCallback(IntPtr userData, Error error)
+        {
+            ShowError(error);
+        }
+
+        private void ShowError(Error libvirtError)
+        {
+            string ErrorBoxMessage = string.Format("Error number : {0}. Error message : {1}", libvirtError.code, libvirtError.Message);
+            MessageBox.Show(ErrorBoxMessage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+    }
+}
diff --git a/examples/VisualStudio/virConnectSetErrorFunc/Form1.resx b/examples/VisualStudio/virConnectSetErrorFunc/Form1.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/examples/VisualStudio/virConnectSetErrorFunc/Form1.resx
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/examples/VisualStudio/virConnectSetErrorFunc/Program.cs b/examples/VisualStudio/virConnectSetErrorFunc/Program.cs
new file mode 100644
index 0000000..f3738fe
--- /dev/null
+++ b/examples/VisualStudio/virConnectSetErrorFunc/Program.cs
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace virConnectSetErrorFunc
+{
+    static class Program
+    {
+        /// <summary>
+        /// Point d'entrée principal de l'application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new Form1());
+        }
+    }
+}
diff --git a/examples/VisualStudio/virConnectSetErrorFunc/Properties/AssemblyInfo.cs b/examples/VisualStudio/virConnectSetErrorFunc/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..ee98ced
--- /dev/null
+++ b/examples/VisualStudio/virConnectSetErrorFunc/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Les informations générales relatives à un assembly dépendent de 
+// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations
+// associées à un assembly.
+[assembly: AssemblyTitle("virConnectSetErrorFunc")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("virConnectSetErrorFunc")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly 
+// aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de 
+// COM, affectez la valeur true à l'attribut ComVisible sur ce type.
+[assembly: ComVisible(false)]
+
+// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM
+[assembly: Guid("308a32b7-b8a1-4093-bfc3-b74b0ee9663e")]
+
+// Les informations de version pour un assembly se composent des quatre valeurs suivantes :
+//
+//      Version principale
+//      Version secondaire 
+//      Numéro de build
+//      Révision
+//
+// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut 
+// en utilisant '*', comme indiqué ci-dessous :
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/examples/VisualStudio/virConnectSetErrorFunc/Properties/Resources.Designer.cs b/examples/VisualStudio/virConnectSetErrorFunc/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..cd978d6
--- /dev/null
+++ b/examples/VisualStudio/virConnectSetErrorFunc/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     Ce code a été généré par un outil.
+//     Version du runtime :4.0.30319.1
+//
+//     Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
+//     le code est régénéré.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace virConnectSetErrorFunc.Properties
+{
+
+
+    /// <summary>
+    ///   Une classe de ressource fortement typée destinée, entre autres, à la consultation des chaînes localisées.
+    /// </summary>
+    // Cette classe a été générée automatiquement par la classe StronglyTypedResourceBuilder
+    // à l'aide d'un outil, tel que ResGen ou Visual Studio.
+    // Pour ajouter ou supprimer un membre, modifiez votre fichier .ResX, puis réexécutez ResGen
+    // avec l'option /str ou régénérez votre projet VS.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   Retourne l'instance ResourceManager mise en cache utilisée par cette classe.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("virConnectSetErrorFunc.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   Remplace la propriété CurrentUICulture du thread actuel pour toutes
+        ///   les recherches de ressources à l'aide de cette classe de ressource fortement typée.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/examples/VisualStudio/virConnectSetErrorFunc/Properties/Resources.resx b/examples/VisualStudio/virConnectSetErrorFunc/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/examples/VisualStudio/virConnectSetErrorFunc/Properties/Resources.resx
@@ -0,0 +1,117 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/examples/VisualStudio/virConnectSetErrorFunc/Properties/Settings.Designer.cs b/examples/VisualStudio/virConnectSetErrorFunc/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..8462bef
--- /dev/null
+++ b/examples/VisualStudio/virConnectSetErrorFunc/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace virConnectSetErrorFunc.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/examples/VisualStudio/virConnectSetErrorFunc/Properties/Settings.settings b/examples/VisualStudio/virConnectSetErrorFunc/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/examples/VisualStudio/virConnectSetErrorFunc/Properties/Settings.settings
@@ -0,0 +1,7 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
diff --git a/examples/VisualStudio/virConnectSetErrorFunc/virConnectSetErrorFunc.csproj b/examples/VisualStudio/virConnectSetErrorFunc/virConnectSetErrorFunc.csproj
new file mode 100644
index 0000000..d694909
--- /dev/null
+++ b/examples/VisualStudio/virConnectSetErrorFunc/virConnectSetErrorFunc.csproj
@@ -0,0 +1,93 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{C528AE73-95C1-4D92-961F-3B35A55E3E30}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>virConnectSetErrorFunc</RootNamespace>
+    <AssemblyName>virConnectSetErrorFunc</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\projects\VisualStudio\LibvirtBindings.csproj">
+      <Project>{592FE0DB-C205-4934-BD20-79BDAB1584C1}</Project>
+      <Name>LibvirtBindings</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
diff --git a/projects/MonoDevelop/LibvirtBindings.sln b/projects/MonoDevelop/LibvirtBindings.sln
index d0cf60c..c2258ce 100644
--- a/projects/MonoDevelop/LibvirtBindings.sln
+++ b/projects/MonoDevelop/LibvirtBindings.sln
@@ -11,12 +11,18 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "virConnectOpen", "..\..\exa
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "virEventRegisterImpl", "..\..\examples\MonoDevelop\virEventRegisterImpl\virEventRegisterImpl.csproj", "{4576BB61-F143-4BC8-BD1D-D50F710CEA10}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "virConnectSetErrorFunc", "..\..\examples\MonoDevelop\virConnectSetErrorFunc\virConnectSetErrorFunc.csproj", "{243DD685-9AB3-4CD0-93D5-92034C1D97D8}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{243DD685-9AB3-4CD0-93D5-92034C1D97D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{243DD685-9AB3-4CD0-93D5-92034C1D97D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{243DD685-9AB3-4CD0-93D5-92034C1D97D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{243DD685-9AB3-4CD0-93D5-92034C1D97D8}.Release|Any CPU.Build.0 = Release|Any CPU
 		{3259AE36-B12F-435E-9124-F6CAA781AD5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{3259AE36-B12F-435E-9124-F6CAA781AD5C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{3259AE36-B12F-435E-9124-F6CAA781AD5C}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -38,8 +44,9 @@ Global
 		{3259AE36-B12F-435E-9124-F6CAA781AD5C} = {504BA6A7-9D0E-44BA-827D-D797773347FD}
 		{FFCD939E-7F9A-44D5-AEBC-84F40942E8B5} = {504BA6A7-9D0E-44BA-827D-D797773347FD}
 		{4576BB61-F143-4BC8-BD1D-D50F710CEA10} = {504BA6A7-9D0E-44BA-827D-D797773347FD}
+		{243DD685-9AB3-4CD0-93D5-92034C1D97D8} = {504BA6A7-9D0E-44BA-827D-D797773347FD}
 	EndGlobalSection
 	GlobalSection(MonoDevelopProperties) = preSolution
-		StartupItem = ..\..\examples\MonoDevelop\virEventRegisterImpl\virEventRegisterImpl.csproj
+		StartupItem = ..\..\examples\MonoDevelop\virConnectSetErrorFunc\virConnectSetErrorFunc.csproj
 	EndGlobalSection
 EndGlobal
diff --git a/projects/VisualStudio/LibvirtBindings.csproj b/projects/VisualStudio/LibvirtBindings.csproj
index c825be1..5f7139f 100644
--- a/projects/VisualStudio/LibvirtBindings.csproj
+++ b/projects/VisualStudio/LibvirtBindings.csproj
@@ -22,6 +22,8 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+    <DocumentationFile>bin\Debug\LibvirtBindings.XML</DocumentationFile>
+    <PlatformTarget>x86</PlatformTarget>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>pdbonly</DebugType>
diff --git a/projects/VisualStudio/LibvirtBindings.sln b/projects/VisualStudio/LibvirtBindings.sln
index 785a866..106fe54 100644
--- a/projects/VisualStudio/LibvirtBindings.sln
+++ b/projects/VisualStudio/LibvirtBindings.sln
@@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "virConnectOpen", "..\..\exa
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "virEventRegisterImpl", "..\..\examples\VisualStudio\virEventRegisterImpl\virEventRegisterImpl.csproj", "{E3319DF1-30AA-4B43-82A3-B66463F07305}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "virConnectSetErrorFunc", "..\..\examples\VisualStudio\virConnectSetErrorFunc\virConnectSetErrorFunc.csproj", "{C528AE73-95C1-4D92-961F-3B35A55E3E30}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -61,6 +63,16 @@ Global
 		{E3319DF1-30AA-4B43-82A3-B66463F07305}.Release|Mixed Platforms.Build.0 = Release|x86
 		{E3319DF1-30AA-4B43-82A3-B66463F07305}.Release|x86.ActiveCfg = Release|x86
 		{E3319DF1-30AA-4B43-82A3-B66463F07305}.Release|x86.Build.0 = Release|x86
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30}.Debug|x86.ActiveCfg = Debug|x86
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30}.Debug|x86.Build.0 = Debug|x86
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30}.Release|Any CPU.ActiveCfg = Release|x86
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30}.Release|Mixed Platforms.Build.0 = Release|x86
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30}.Release|x86.ActiveCfg = Release|x86
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -69,5 +81,6 @@ Global
 		{F88B2E89-C3E6-4C69-881B-EB2AB4DE6CB3} = {AB0DC218-8ABA-4351-AD87-361AF7AF71C9}
 		{54F79BD5-8E81-4100-BD13-C63072D00B0B} = {AB0DC218-8ABA-4351-AD87-361AF7AF71C9}
 		{E3319DF1-30AA-4B43-82A3-B66463F07305} = {AB0DC218-8ABA-4351-AD87-361AF7AF71C9}
+		{C528AE73-95C1-4D92-961F-3B35A55E3E30} = {AB0DC218-8ABA-4351-AD87-361AF7AF71C9}
 	EndGlobalSection
 EndGlobal
-- 
1.7.2.3.msysgit.0

