3 // System.Reflection.Emit/UnmanagedMarshal.cs
6 // Paolo Molaro (lupus@ximian.com)
8 // (C) 2001-2002 Ximian, Inc. http://www.ximian.com
11 using System.Reflection.Emit;
12 using System.Runtime.InteropServices;
15 namespace System.Reflection.Emit {
18 public sealed class UnmanagedMarshal {
20 private UnmanagedType t;
21 private UnmanagedType tbase;
27 private UnmanagedMarshal (UnmanagedType maint, int cnt) {
32 private UnmanagedMarshal (UnmanagedType maint, UnmanagedType elemt) {
38 public UnmanagedType BaseType {
40 if (t == UnmanagedType.LPArray || t == UnmanagedType.SafeArray)
41 throw new ArgumentException ();
46 public int ElementCount {
50 public UnmanagedType GetUnmanagedType {
55 get {return new Guid (guid);}
58 public static UnmanagedMarshal DefineByValArray( int elemCount) {
59 return new UnmanagedMarshal (UnmanagedType.ByValArray, elemCount);
62 public static UnmanagedMarshal DefineByValTStr( int elemCount) {
63 return new UnmanagedMarshal (UnmanagedType.ByValTStr, elemCount);
66 public static UnmanagedMarshal DefineLPArray( UnmanagedType elemType) {
67 return new UnmanagedMarshal (UnmanagedType.LPArray, elemType);
70 public static UnmanagedMarshal DefineSafeArray( UnmanagedType elemType) {
71 return new UnmanagedMarshal (UnmanagedType.SafeArray, elemType);
74 public static UnmanagedMarshal DefineUnmanagedMarshal( UnmanagedType unmanagedType) {
75 return new UnmanagedMarshal (unmanagedType, unmanagedType);
78 /* this one is missing from the MS implementation */
79 public static UnmanagedMarshal DefineCustom (Type typeref, string cookie, string mtype, Guid id) {
80 UnmanagedMarshal res = new UnmanagedMarshal (UnmanagedType.CustomMarshaler, UnmanagedType.CustomMarshaler);
82 res.marshaltype = mtype;
83 res.marshaltyperef = typeref;
87 res.guid = id.ToString ();