[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue)] |
This attribute is optional, as each data type has a default marshaling behavior. This attribute is only necessary when a given type can be marshaled to multiple types. For example, a String could be marshaled to unmanaged code as either a UnmanagedType.LPStr, UnmanagedType.LPWStr, UnmanagedType.LPTStr or a System.Runtime.InteropServices.UnmanagedType.BStr (not supported on the shared source CLI) . By default, the string is marshaled as a System.Runtime.InteropServices.UnmanagedType.BStr (not supported on the shared source CLI) to COM methods. The MarshalAsAttribute attribute can be applied to an individual field or parameter to cause that particular string to be marshaled as a UnmanagedType.LPStr instead of a System.Runtime.InteropServices.UnmanagedType.BStr (not supported on the shared source CLI) . For complete details on using this attribute, see the Data Marshaling Specification.
In most cases, the attribute simply identifies the format of the unmanaged data using the UnmanagedType enumeration, as shown in the following example.
void MyMethod([MarshalAs(LPStr)] String s);
Some UnmanagedType enumerations require additional information. For example, additional information is needed when the UnmanagedType is UnmanagedType.LPArray. For a complete description of how to use this attribute, see the Data Type Marshaling Spec.
ctor #1 | Overloaded:.ctor(short unmanagedType) Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType value. |
ctor #2 | Overloaded:.ctor(UnmanagedType unmanagedType) Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType value. |
ArraySubType | The element type of the unmanaged array. |
MarshalCookie | Provides additional information to a custom marshaler. |
MarshalType | Specifies the fully qualified name of a custom marshaler. |
MarshalTypeRef | Implements MarshalAsAttribute.MarshalType as a type. |
SizeConst | Indicates the number of elements in the fixed length array to import. |
SizeParamIndex | Indicates which parameter contains the count of array elements, much like size_is in COM, and is zero-based. |
TypeId (inherited from System.Attribute) |
Read-only See base class member description: System.Attribute.TypeId When implemented in a derived class, gets a unique identifier for this Attribute. |
Value | Read-only Gets the UnmanagedType value the data is to be marshaled as. |
Equals (inherited from System.Object) |
See base class member description: System.Object.Equals Derived from System.Object, the primary base class for all objects. |
GetHashCode (inherited from System.Attribute) |
See base class member description: System.Attribute.GetHashCode Returns the hash code for this instance. |
GetType (inherited from System.Object) |
See base class member description: System.Object.GetType Derived from System.Object, the primary base class for all objects. |
IsDefaultAttribute (inherited from System.Attribute) |
See base class member description: System.Attribute.IsDefaultAttribute When overridden in a derived class, returns an indication whether the value of this instance is the default value for the derived class. |
Match (inherited from System.Attribute) |
See base class member description: System.Attribute.Match When overridden in a derived class, returns a value indicating whether this instance equals a specified object. |
ToString (inherited from System.Object) |
See base class member description: System.Object.ToString Derived from System.Object, the primary base class for all objects. |
Finalize (inherited from System.Object) |
See base class member description: System.Object.Finalize Derived from System.Object, the primary base class for all objects. |
MemberwiseClone (inherited from System.Object) |
See base class member description: System.Object.MemberwiseClone Derived from System.Object, the primary base class for all objects. |
Hierarchy:
public MarshalAsAttribute( |
unmanagedType
public MarshalAsAttribute( |
unmanagedType
public UnmanagedType ArraySubType;
|
public string MarshalCookie;
|
For example, the same marshaler could be used to provide a number of wrappers where the cookie is used to indicate the specific wrapper. The cookie is passed to the GetInstance method of the marshaler.
public string MarshalType;
|
public Type MarshalTypeRef;
|
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalType = "Assembly,
NameSpace.TypeName"]
To:
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef =
typeof(NameSpace.TypeName)]
public int SizeConst;
|
public short SizeParamIndex;
|
using System.Runtime.InteropServices; using SomeNamespace; namespace SomeNamespace { // Force the layout of your fields to the C style struct layout. // Without this, the .NET Framework will reorder your fields. [StructLayout(LayoutKind.Sequential)] public struct Vertex { float x; float y; float z; } class SomeClass { // Add [In] or [In, Out] attributes as approppriate. // Marshal as a C style array of Vertex, where the second (SizeParamIndex is zero-based) // parameter (size) contains the count of array elements. [DllImport ("somelib.dll")] public static extern void SomeUnsafeMethod( [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] Vertex[] data, long size ); public void SomeMethod() { Vertex[] verts = new Vertex[3]; SomeUnsafeMethod( verts, verts.Length ); } } } class Test { public static void Main() { SomeClass AClass = new SomeClass(); AClass.SomeMethod(); } }
public virtual object TypeId {get;}
|
public UnmanagedType Value {get;}
|
~MarshalAsAttribute(); |
public override int GetHashCode(); |
public Type GetType(); |
public virtual bool IsDefaultAttribute(); |
The implementation of this method in a derived class compares the value of this instance to a standard, default value obtained by some means, then returns a Boolean value that indicates whether the value of this instance is equal to the standard. The standard value is typically coded as a constant in the implementation, or stored programmatically in a field used by the implementation.
obj
protected object MemberwiseClone(); |
public virtual string ToString(); |