2005-06-14 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / corlib / System.Reflection.Emit / UnmanagedMarshal.cs
old mode 100755 (executable)
new mode 100644 (file)
index c63711b..d0cff09
@@ -37,6 +37,10 @@ using System;
 
 namespace System.Reflection.Emit {
 
+#if NET_2_0
+       [Obsolete ("An alternate API is available: Emit the MarshalAs custom attribute instead.")]
+       [ComVisible (true)]
+#endif
        [Serializable]
        public sealed class UnmanagedMarshal {
                private int count;
@@ -113,6 +117,7 @@ namespace System.Reflection.Emit {
                        return res;
                }
 
+               // sizeConst and sizeParamIndex can be -1 meaning they are not specified
                internal static UnmanagedMarshal DefineLPArrayInternal (UnmanagedType elemType, int sizeConst, int sizeParamIndex) {
                        UnmanagedMarshal res = new UnmanagedMarshal (UnmanagedType.LPArray, elemType);
                        res.count = sizeConst;
@@ -128,8 +133,14 @@ namespace System.Reflection.Emit {
                        attr.MarshalCookie = mcookie;
                        attr.MarshalType = marshaltype;
                        attr.MarshalTypeRef = marshaltyperef;
-                       attr.SizeConst = count;
-                       attr.SizeParamIndex = (short)param_num;
+                       if (count == -1)
+                               attr.SizeConst = 0;
+                       else
+                               attr.SizeConst = count;
+                       if (param_num == -1)
+                               attr.SizeParamIndex = 0;
+                       else
+                               attr.SizeParamIndex = (short)param_num;
                        return attr;
                }
        }