comparison VBoxFrontend/VBoxXPCOM.cs @ 2:f1deea9c97a0

Cleaned up the interop code generator, added wrapper application to initialize kernel driver and run mono
author Ivo Smits
date Wed, 04 May 2011 16:10:08 +0200
parents e1ec7bf71313
children
comparison
equal deleted inserted replaced
1:55ca098c88d0 2:f1deea9c97a0
4 using VirtualBox; 4 using VirtualBox;
5 5
6 namespace ConsoleApplication1 { 6 namespace ConsoleApplication1 {
7 public class VBoxXPCOM { 7 public class VBoxXPCOM {
8 private delegate UInt32 pfnGetVersionDelegate(); 8 private delegate UInt32 pfnGetVersionDelegate();
9 private unsafe delegate void pfnComInitializeDelegate( 9 private unsafe delegate void pfnComInitializeDelegate([MarshalAs(UnmanagedType.LPStr)] String pszVirtualBoxIID, out IntPtr ppVirtualBox, [MarshalAs(UnmanagedType.LPStr)] String pszSessionIID, out IntPtr ppSession);
10 [MarshalAs(UnmanagedType.LPStr)] String pszVirtualBoxIID,
11 out IntPtr ppVirtualBox,
12 [MarshalAs(UnmanagedType.LPStr)] String pszSessionIID,
13 out IntPtr ppSession);
14 private delegate void pfnComUninitializeDelegate(); 10 private delegate void pfnComUninitializeDelegate();
15 private delegate void pfnGetEventQueueDelegate(out IntPtr eventQueue); //void (*pfnGetEventQueue)(nsIEventQueue **eventQueue); 11 private delegate void pfnGetEventQueueDelegate(out IntPtr eventQueue); //void (*pfnGetEventQueue)(nsIEventQueue **eventQueue);
12 private delegate void pfnComUnallocMem(IntPtr pv); //void (*pfnComUnallocMem)(void *pv);
16 13
17 private struct VBOXXPCOMC { 14 private struct VBOXXPCOMC {
18 public UInt32 cb; //The size of the structure. 15 public UInt32 cb; //The size of the structure.
19 public UInt32 uVersion; //The structure version. 16 public UInt32 uVersion; //The structure version.
20 [MarshalAs(UnmanagedType.FunctionPtr)] 17 [MarshalAs(UnmanagedType.FunctionPtr)]
22 [MarshalAs(UnmanagedType.FunctionPtr)] 19 [MarshalAs(UnmanagedType.FunctionPtr)]
23 public pfnComInitializeDelegate pfnComInitialize; 20 public pfnComInitializeDelegate pfnComInitialize;
24 [MarshalAs(UnmanagedType.FunctionPtr)] 21 [MarshalAs(UnmanagedType.FunctionPtr)]
25 public pfnComUninitializeDelegate pfnComUninitialize; 22 public pfnComUninitializeDelegate pfnComUninitialize;
26 [MarshalAs(UnmanagedType.FunctionPtr)] 23 [MarshalAs(UnmanagedType.FunctionPtr)]
27 private pfnComUninitializeDelegate pfnComUnallocMem; //void (*pfnComUnallocMem)(void *pv); 24 private pfnComUnallocMem pfnComUnallocMem;
28 [MarshalAs(UnmanagedType.FunctionPtr)] 25 [MarshalAs(UnmanagedType.FunctionPtr)]
29 private pfnComUninitializeDelegate pfnUtf16Free; //void (*pfnUtf16Free)(PRUnichar *pwszString); 26 private pfnComUnallocMem pfnUtf16Free; //void (*pfnUtf16Free)(PRUnichar *pwszString);
30 [MarshalAs(UnmanagedType.FunctionPtr)] 27 [MarshalAs(UnmanagedType.FunctionPtr)]
31 private pfnComUninitializeDelegate pfnUtf8Free; //void (*pfnUtf8Free)(char *pszString); 28 private pfnComUnallocMem pfnUtf8Free; //void (*pfnUtf8Free)(char *pszString);
32 [MarshalAs(UnmanagedType.FunctionPtr)] 29 [MarshalAs(UnmanagedType.FunctionPtr)]
33 private pfnComUninitializeDelegate pfnUtf16ToUtf8; //int (*pfnUtf16ToUtf8)(const PRUnichar *pwszString, char **ppszString); 30 private pfnComUninitializeDelegate pfnUtf16ToUtf8; //int (*pfnUtf16ToUtf8)(const PRUnichar *pwszString, char **ppszString);
34 [MarshalAs(UnmanagedType.FunctionPtr)] 31 [MarshalAs(UnmanagedType.FunctionPtr)]
35 private pfnComUninitializeDelegate pfnUtf8ToUtf16; //int (*pfnUtf8ToUtf16)(const char *pszString, PRUnichar **ppwszString); 32 private pfnComUninitializeDelegate pfnUtf8ToUtf16; //int (*pfnUtf8ToUtf16)(const char *pszString, PRUnichar **ppwszString);
36 [MarshalAs(UnmanagedType.FunctionPtr)] 33 [MarshalAs(UnmanagedType.FunctionPtr)]
116 ~VBoxXPCOM() { 113 ~VBoxXPCOM() {
117 VirtualBox = null; 114 VirtualBox = null;
118 Session = null; 115 Session = null;
119 EventQueue = null; 116 EventQueue = null;
120 GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); 117 GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
118 GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
121 FunctionTable.pfnComUninitialize(); 119 FunctionTable.pfnComUninitialize();
122 } 120 }
123 } 121 }
124 } 122 }