Freigeben über


MethodBuilder.SetMarshal-Methode

HINWEIS: Diese Methode ist mittlerweile veraltet.

Legt Marshallinformationen für den Rückgabetyp dieser Methode fest.

Namespace: System.Reflection.Emit
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<ObsoleteAttribute("An alternate API is available: Emit the MarshalAs custom attribute instead. https://go.microsoft.com/fwlink/?linkid=14202")> _
Public Sub SetMarshal ( _
    unmanagedMarshal As UnmanagedMarshal _
)
'Usage
Dim instance As MethodBuilder
Dim unmanagedMarshal As UnmanagedMarshal

instance.SetMarshal(unmanagedMarshal)
[ObsoleteAttribute("An alternate API is available: Emit the MarshalAs custom attribute instead. https://go.microsoft.com/fwlink/?linkid=14202")] 
public void SetMarshal (
    UnmanagedMarshal unmanagedMarshal
)
[ObsoleteAttribute(L"An alternate API is available: Emit the MarshalAs custom attribute instead. https://go.microsoft.com/fwlink/?linkid=14202")] 
public:
void SetMarshal (
    UnmanagedMarshal^ unmanagedMarshal
)
/** @attribute ObsoleteAttribute("An alternate API is available: Emit the MarshalAs custom attribute instead. https://go.microsoft.com/fwlink/?linkid=14202") */ 
public void SetMarshal (
    UnmanagedMarshal unmanagedMarshal
)
ObsoleteAttribute("An alternate API is available: Emit the MarshalAs custom attribute instead. https://go.microsoft.com/fwlink/?linkid=14202") 
public function SetMarshal (
    unmanagedMarshal : UnmanagedMarshal
)

Parameter

  • unmanagedMarshal
    Marshallinformationen für den Rückgabetyp dieser Methode.

Ausnahmen

Ausnahmetyp Bedingung

InvalidOperationException

Der enthaltende Typ wurde bereits mit CreateType erstellt.

– oder –

Für die aktuelle Methode ist die IsGenericMethod-Eigenschaft true, die IsGenericMethodDefinition-Eigenschaft ist jedoch false.

Beispiel

Das folgende Codebeispiel veranschaulicht die kontextabhängige Verwendung der SetMarshal-Methode zum Marshallen der Ergebnisse eines Methodenaufrufs als anderer Typ.

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)
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);    
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, 
    int.class.ToType(), new Type[] { String.class.ToType() });

// 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);

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 1.0, 1.1
Veraltet (Compilerwarnung) in 2.0

Siehe auch

Referenz

MethodBuilder-Klasse
MethodBuilder-Member
System.Reflection.Emit-Namespace