public static int Main()
 {
     bool
     isWindows
     =
     !(((int)Environment.OSVersion.Platform
     ==
     4)
     ||
     ((int)Environment.OSVersion.Platform
     ==
     128));
     if
     (isWindows)
     {
     string
     str;
     if
     (mono_test_marshal_bstr_in
     ("mono_test_marshal_bstr_in")
     !=
     0)
     return
     1;
     if
     (mono_test_marshal_bstr_out
     (out
     str)
     !=
     0
     ||
     str
     !=
     "mono_test_marshal_bstr_out")
     return
     2;
     if
     (mono_test_marshal_bstr_in_null
     (null)
     !=
     0)
     return
     1;
     if
     (mono_test_marshal_bstr_out_null
     (out
     str)
     !=
     0
     ||
     str
     !=
     null)
     return
     2;
     object
     obj;
     if
     (mono_test_marshal_variant_in_sbyte
     ((sbyte)100)
     !=
     0)
     return
     13;
     if
     (mono_test_marshal_variant_in_byte
     ((byte)100)
     !=
     0)
     return
     14;
     if
     (mono_test_marshal_variant_in_short
     ((short)314)
     !=
     0)
     return
     15;
     if
     (mono_test_marshal_variant_in_ushort
     ((ushort)314)
     !=
     0)
     return
     16;
     if
     (mono_test_marshal_variant_in_int
     ((int)314)
     !=
     0)
     return
     17;
     if
     (mono_test_marshal_variant_in_uint
     ((uint)314)
     !=
     0)
     return
     18;
     if
     (mono_test_marshal_variant_in_long
     ((long)314)
     !=
     0)
     return
     19;
     if
     (mono_test_marshal_variant_in_ulong
     ((ulong)314)
     !=
     0)
     return
     20;
     if
     (mono_test_marshal_variant_in_float
     ((float)3.14)
     !=
     0)
     return
     21;
     if
     (mono_test_marshal_variant_in_double
     ((double)3.14)
     !=
     0)
     return
     22;
     if
     (mono_test_marshal_variant_in_bstr
     ("PI")
     !=
     0)
     return
     23;
     if
     (mono_test_marshal_variant_out_sbyte
     (out
     obj)
     !=
     0
     ||
     (sbyte)obj
     !=
     100)
     return
     24;
     if
     (mono_test_marshal_variant_out_byte
     (out
     obj)
     !=
     0
     ||
     (byte)obj
     !=
     100)
     return
     25;
     if
     (mono_test_marshal_variant_out_short
     (out
     obj)
     !=
     0
     ||
     (short)obj
     !=
     314)
     return
     26;
     if
     (mono_test_marshal_variant_out_ushort
     (out
     obj)
     !=
     0
     ||
     (ushort)obj
     !=
     314)
     return
     27;
     if
     (mono_test_marshal_variant_out_int
     (out
     obj)
     !=
     0
     ||
     (int)obj
     !=
     314)
     return
     28;
     if
     (mono_test_marshal_variant_out_uint
     (out
     obj)
     !=
     0
     ||
     (uint)obj
     !=
     314)
     return
     29;
     if
     (mono_test_marshal_variant_out_long
     (out
     obj)
     !=
     0
     ||
     (long)obj
     !=
     314)
     return
     30;
     if
     (mono_test_marshal_variant_out_ulong
     (out
     obj)
     !=
     0
     ||
     (ulong)obj
     !=
     314)
     return
     31;
     if
     (mono_test_marshal_variant_out_float
     (out
     obj)
     !=
     0
     ||
     ((float)obj
     -
     3.14)
     /
     3.14
     >
     .001)
     return
     32;
     if
     (mono_test_marshal_variant_out_double
     (out
     obj)
     !=
     0
     ||
     ((double)obj
     -
     3.14)
     /
     3.14
     >
     .001)
     return
     33;
     if
     (mono_test_marshal_variant_out_bstr
     (out
     obj)
     !=
     0
     ||
     (string)obj
     !=
     "PI")
     return
     34;
     VarFunc
     func
     =
     new
     VarFunc
     (mono_test_marshal_variant_in_callback);
     if
     (mono_test_marshal_variant_in_sbyte_unmanaged
     (func)
     !=
     0)
     return
     35;
     if
     (mono_test_marshal_variant_in_byte_unmanaged
     (func)
     !=
     0)
     return
     36;
     if
     (mono_test_marshal_variant_in_short_unmanaged
     (func)
     !=
     0)
     return
     37;
     if
     (mono_test_marshal_variant_in_ushort_unmanaged
     (func)
     !=
     0)
     return
     38;
     if
     (mono_test_marshal_variant_in_int_unmanaged
     (func)
     !=
     0)
     return
     39;
     if
     (mono_test_marshal_variant_in_uint_unmanaged
     (func)
     !=
     0)
     return
     40;
     if
     (mono_test_marshal_variant_in_long_unmanaged
     (func)
     !=
     0)
     return
     41;
     if
     (mono_test_marshal_variant_in_ulong_unmanaged
     (func)
     !=
     0)
     return
     42;
     if
     (mono_test_marshal_variant_in_float_unmanaged
     (func)
     !=
     0)
     return
     43;
     if
     (mono_test_marshal_variant_in_double_unmanaged
     (func)
     !=
     0)
     return
     44;
     if
     (mono_test_marshal_variant_in_bstr_unmanaged
     (func)
     !=
     0)
     return
     45;
     if
     (mono_test_marshal_variant_in_bool_true_unmanaged
     (func)
     !=
     0)
     return
     46;
     VarRefFunc
     reffunc
     =
     new
     VarRefFunc
     (mono_test_marshal_variant_out_callback);
     if
     (mono_test_marshal_variant_out_sbyte_unmanaged
     (reffunc)
     !=
     0)
     return
     50;
     if
     (mono_test_marshal_variant_out_byte_unmanaged
     (reffunc)
     !=
     0)
     return
     51;
     if
     (mono_test_marshal_variant_out_short_unmanaged
     (reffunc)
     !=
     0)
     return
     52;
     if
     (mono_test_marshal_variant_out_ushort_unmanaged
     (reffunc)
     !=
     0)
     return
     53;
     if
     (mono_test_marshal_variant_out_int_unmanaged
     (reffunc)
     !=
     0)
     return
     54;
     if
     (mono_test_marshal_variant_out_uint_unmanaged
     (reffunc)
     !=
     0)
     return
     55;
     if
     (mono_test_marshal_variant_out_long_unmanaged
     (reffunc)
     !=
     0)
     return
     56;
     if
     (mono_test_marshal_variant_out_ulong_unmanaged
     (reffunc)
     !=
     0)
     return
     57;
     if
     (mono_test_marshal_variant_out_float_unmanaged
     (reffunc)
     !=
     0)
     return
     58;
     if
     (mono_test_marshal_variant_out_double_unmanaged
     (reffunc)
     !=
     0)
     return
     59;
     if
     (mono_test_marshal_variant_out_bstr_unmanaged
     (reffunc)
     !=
     0)
     return
     60;
     if
     (mono_test_marshal_variant_out_bool_true_unmanaged
     (reffunc)
     !=
     0)
     return
     61;
     IntPtr
     pUnk;
     if
     (mono_test_marshal_com_object_create
     (out
     pUnk)
     !=
     0)
     return
     145;
     if
     (mono_test_marshal_com_object_ref_count
     (pUnk)
     !=
     1)
     return
     146;
     if
     (Marshal.AddRef
     (pUnk)
     !=
     2)
     return
     147;
     if
     (mono_test_marshal_com_object_ref_count
     (pUnk)
     !=
     2)
     return
     148;
     if
     (Marshal.Release
     (pUnk)
     !=
     1)
     return
     149;
     if
     (mono_test_marshal_com_object_ref_count
     (pUnk)
     !=
     1)
     return
     150;
     object
     com_obj
     =
     Marshal.GetObjectForIUnknown
     (pUnk);
     if
     (com_obj
     ==
     null)
     return
     151;
     ITest
     itest
     =
     com_obj
     as
     ITest;
     if
     (itest
     ==
     null)
     return
     152;
     IntPtr
     pUnk2;
     if
     (mono_test_marshal_com_object_same
     (out
     pUnk2)
     !=
     0)
     return
     153;
     object
     com_obj2
     =
     Marshal.GetObjectForIUnknown
     (pUnk2);
     if
     (com_obj
     !=
     com_obj2)
     return
     154;
     if
     (!com_obj.Equals
     (com_obj2))
     return
     155;
     IntPtr
     pUnk3;
     if
     (mono_test_marshal_com_object_create
     (out
     pUnk3)
     !=
     0)
     return
     156;
     object
     com_obj3
     =
     Marshal.GetObjectForIUnknown
     (pUnk3);
     if
     (com_obj
     ==
     com_obj3)
     return
     157;
     if
     (com_obj.Equals
     (com_obj3))
     return
     158;
     if
     (Marshal.ReleaseComObject
     (com_obj2)
     !=
     1)
     return
     159;
     if
     (Marshal.ReleaseComObject
     (com_obj3)
     !=
     0)
     return
     160;
     IntPtr
     iunknown
     =
     Marshal.GetIUnknownForObject
     (com_obj);
     if
     (iunknown
     ==
     IntPtr.Zero)
     return
     170;
     if
     (pUnk
     !=
     iunknown)
     return
     171;
     if
     (TestITest
     (itest)
     !=
     0)
     return
     172;
     if
     (TestITestPresSig
     (itest
     as
     ITestPresSig)
     !=
     0)
     return
     173;
     ManagedTest
     test
     =
     new
     ManagedTest
     ();
     mono_test_marshal_ccw_itest
     (test);
     if
     (test.Status
     !=
     0)
     return
     200;
     ManagedTestPresSig
     test_pres_sig
     =
     new
     ManagedTestPresSig
     ();
     mono_test_marshal_ccw_itest
     (test_pres_sig);
     }
     return
     0;
 }
        public void ITestOut(out
ITest
val)
        {
            val
            =
            new
            ManagedTest
            ();
        }