System.Reflection.Emit (mscorlib.dll)sealed class

This class defines how parameters or fields should be marshaled in function calls to unmanaged code. By default, the CLR applies certain format conversions automatically during this marshaling (for example, it might change a System.String object to an unmanaged BSTR). Use this class to override this default behavior.

To create an instance of this class, use one of the static methods to define the unmanaged type you want. Typically, you will use DefineUnmanagedMarshal( ) for this purpose and specify the unmanaged type using the System.Runtime.InteropServices.UnmanagedType enumeration. Alternatively, use DefineByValTStr( ) to specify marshaling to a string in a fixed array buffer, and specify the other methods for various types of unmanaged arrays. These static methods all return an UnmanagedMarshal object, with its read-only properties set accordingly. Lastly, associate the UnmanagedMarshal with the appropriate type using the SetMarshal( ) method for the ParameterBuilder, MethodBuilder, or FieldBuilder class.

public sealed class UnmanagedMarshal {
// Public Instance Properties
   public UnmanagedType BaseType{get; }
   public int ElementCount{get; }
   public UnmanagedType GetUnmanagedType{get; }
   public Guid IIDGuid{get; }
// Public Static Methods
   public static UnmanagedMarshal DefineByValArray(int elemCount);
   public static UnmanagedMarshal DefineByValTStr(int elemCount);
   public static UnmanagedMarshal DefineLPArray(System.Runtime.InteropServices.UnmanagedType elemType);
   public static UnmanagedMarshal DefineSafeArray(System.Runtime.InteropServices.UnmanagedType elemType);
   public static UnmanagedMarshal DefineUnmanagedMarshal
        System.Runtime.InteropServices.UnmanagedType unmanagedType);

Passed To

FieldBuilder.SetMarshal( ), MethodBuilder.SetMarshal( ), ParameterBuilder.SetMarshal( )

    Part II: Programming with the .NET Framework
    Part IV: API Quick Reference
    Chapter 26. System