MethodBuilder.SetMarshal(UnmanagedMarshal) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Attention
An alternate API is available: Emit the MarshalAs custom attribute instead. http://go.microsoft.com/fwlink/?linkid=14202
Définit les informations de marshaling pour le type de retour de cette méthode.
public:
void SetMarshal(System::Reflection::Emit::UnmanagedMarshal ^ unmanagedMarshal);
public void SetMarshal (System.Reflection.Emit.UnmanagedMarshal unmanagedMarshal);
[System.Obsolete("An alternate API is available: Emit the MarshalAs custom attribute instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public void SetMarshal (System.Reflection.Emit.UnmanagedMarshal unmanagedMarshal);
member this.SetMarshal : System.Reflection.Emit.UnmanagedMarshal -> unit
[<System.Obsolete("An alternate API is available: Emit the MarshalAs custom attribute instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
member this.SetMarshal : System.Reflection.Emit.UnmanagedMarshal -> unit
Public Sub SetMarshal (unmanagedMarshal As UnmanagedMarshal)
Paramètres
- unmanagedMarshal
- UnmanagedMarshal
Informations de marshaling pour le type de retour de cette méthode.
- Attributs
Exceptions
Le type conteneur a déjà été créé à l’aide de CreateType().
- ou -
Pour la méthode actuelle, la propriété IsGenericMethod est true
, mais la propriété IsGenericMethodDefinition est false
.
Exemples
L’exemple de code ci-dessous illustre l’utilisation contextuelle de la SetMarshal
méthode pour marshaler les résultats d’un appel de méthode en tant que type différent.
array<Type^>^ temp0 = { String::typeid };
MethodBuilder^ myMethod = myDynamicType->DefineMethod( "MyMethodReturnsMarshal",
MethodAttributes::Public,
UInt32::typeid,
temp0 );
// We want the return value of our dynamic method to be marshalled as
// an 64-bit (8-Byte) signed integer, instead of the default 32-bit
// unsigned int as specified above. The UnmanagedMarshal class can perform
// the type conversion.
UnmanagedMarshal^ marshalMeAsI8 = UnmanagedMarshal::DefineUnmanagedMarshal(
System::Runtime::InteropServices::UnmanagedType::I8 );
myMethod->SetMarshal( marshalMeAsI8 );
MethodBuilder myMethod = myDynamicType.DefineMethod("MyMethodReturnsMarshal",
MethodAttributes.Public,
typeof(uint),
new Type[] { typeof(string) });
// We want the return value of our dynamic method to be marshalled as
// an 64-bit (8-byte) signed integer, instead of the default 32-bit
// unsigned int as specified above. The UnmanagedMarshal class can perform
// the type conversion.
UnmanagedMarshal marshalMeAsI8 = UnmanagedMarshal.DefineUnmanagedMarshal(
System.Runtime.InteropServices.UnmanagedType.I8);
myMethod.SetMarshal(marshalMeAsI8);
Dim myMethod As MethodBuilder = myDynamicType.DefineMethod("MyMethodReturnsMarshal", _
MethodAttributes.Public, GetType(System.UInt32), _
New Type() {GetType(String)})
' We want the return value of our dynamic method to be marshalled as
' an 64-bit (8-byte) signed integer, instead of the default 32-bit
' unsigned int as specified above. The UnmanagedMarshal class can perform
' the type conversion.
Dim marshalMeAsI8 As UnmanagedMarshal = UnmanagedMarshal.DefineUnmanagedMarshal( _
System.Runtime.InteropServices.UnmanagedType.I8)
myMethod.SetMarshal(marshalMeAsI8)