2003-07-04 Dietmar Maurer <dietmar@ximian.com>
[mono.git] / mono / tests / pinvoke17.cs
1 using System;
2 using System.Runtime.InteropServices;
3
4 [StructLayout (LayoutKind.Sequential)]   
5 public class OSVersionInfo 
6 {                       
7         public int a;
8         public int b; 
9 }
10
11 [StructLayout (LayoutKind.Sequential)]  
12 public struct OSVersionInfo2 
13 {
14         public int a;
15         public int b; 
16 }
17
18
19 public class LibWrap 
20 {
21         [DllImport ("libtest")]                         
22         public static extern int GetVersionEx ([In, Out] OSVersionInfo osvi);
23
24         [DllImport ("libtest", EntryPoint="GetVersionEx" )] 
25         public static extern int GetVersionEx2 (ref OSVersionInfo2 osvi);  
26 }
27
28 public class Test
29 {
30         public static int Main()
31         {
32                 Console.WriteLine( "\nPassing OSVersionInfo as class" );
33
34                 OSVersionInfo osvi = new OSVersionInfo();
35                 osvi.a = 1;
36                 osvi.b = 2;
37                 
38                 if (LibWrap.GetVersionEx (osvi) != 5)
39                         return 1;
40
41                 if (osvi.a != 2)
42                         return 2;
43                 
44                 if (osvi.b != 3)
45                         return 3;
46                 
47                 Console.WriteLine( "A: {0}", osvi.a);
48                 Console.WriteLine( "B: {0}", osvi.b);
49                 
50                 Console.WriteLine( "\nPassing OSVersionInfo as struct" );
51                 
52                 OSVersionInfo2 osvi2 = new OSVersionInfo2();
53                 osvi2.a = 1;
54                 osvi2.b = 2;
55
56                 if (LibWrap.GetVersionEx2 (ref osvi2) != 5)
57                         return 4;
58                 
59                 if (osvi2.a != 2)
60                         return 5;
61                 
62                 if (osvi2.b != 3)
63                         return 6;
64                 
65                 Console.WriteLine( "A: {0}", osvi2.a);
66                 Console.WriteLine( "B: {0}", osvi2.b);
67
68                 return 0;
69         }
70 }
71
72
73