ILGenerator.EmitCalli Methode

Definition

Fügt eine Calli Anweisung in den Microsoft MSIL-Datenstrom (Intermediate Language) ein.

Überlädt

Name Beschreibung
EmitCalli(Type)
EmitCalli(OpCode, CallingConvention, Type, Type[])

Fügt eine Calli-Anweisung in den Microsoft MSIL-Datenstrom (Intermediate Language) und gibt eine nicht verwaltete Anrufkonvention für den indirekten Anruf an.

EmitCalli(OpCode, CallingConventions, Type, Type[], Type[])

Fügt eine Calli-Anweisung in den Microsoft MSIL-Datenstrom (Intermediate Language) und gibt eine verwaltete Anrufkonvention für den indirekten Anruf an.

EmitCalli(Type)

Quelle:
ILGenerator.cs
public:
 virtual void EmitCalli(Type ^ functionPointerType);
public virtual void EmitCalli(Type functionPointerType);
abstract member EmitCalli : Type -> unit
override this.EmitCalli : Type -> unit
Public Overridable Sub EmitCalli (functionPointerType As Type)

Parameter

functionPointerType
Type

Gilt für:

EmitCalli(OpCode, CallingConvention, Type, Type[])

Quelle:
ILGenerator.cs
Quelle:
ILGenerator.cs
Quelle:
ILGenerator.cs
Quelle:
ILGenerator.cs
Quelle:
ILGenerator.cs

Fügt eine Calli-Anweisung in den Microsoft MSIL-Datenstrom (Intermediate Language) und gibt eine nicht verwaltete Anrufkonvention für den indirekten Anruf an.

public:
 abstract void EmitCalli(System::Reflection::Emit::OpCode opcode, System::Runtime::InteropServices::CallingConvention unmanagedCallConv, Type ^ returnType, cli::array <Type ^> ^ parameterTypes);
public:
 virtual void EmitCalli(System::Reflection::Emit::OpCode opcode, System::Runtime::InteropServices::CallingConvention unmanagedCallConv, Type ^ returnType, cli::array <Type ^> ^ parameterTypes);
public:
 void EmitCalli(System::Reflection::Emit::OpCode opcode, System::Runtime::InteropServices::CallingConvention unmanagedCallConv, Type ^ returnType, cli::array <Type ^> ^ parameterTypes);
public abstract void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Runtime.InteropServices.CallingConvention unmanagedCallConv, Type? returnType, Type[]? parameterTypes);
public virtual void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Runtime.InteropServices.CallingConvention unmanagedCallConv, Type? returnType, Type[]? parameterTypes);
public virtual void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Runtime.InteropServices.CallingConvention unmanagedCallConv, Type returnType, Type[] parameterTypes);
public void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Runtime.InteropServices.CallingConvention unmanagedCallConv, Type returnType, Type[] parameterTypes);
abstract member EmitCalli : System.Reflection.Emit.OpCode * System.Runtime.InteropServices.CallingConvention * Type * Type[] -> unit
abstract member EmitCalli : System.Reflection.Emit.OpCode * System.Runtime.InteropServices.CallingConvention * Type * Type[] -> unit
override this.EmitCalli : System.Reflection.Emit.OpCode * System.Runtime.InteropServices.CallingConvention * Type * Type[] -> unit
member this.EmitCalli : System.Reflection.Emit.OpCode * System.Runtime.InteropServices.CallingConvention * Type * Type[] -> unit
Public MustOverride Sub EmitCalli (opcode As OpCode, unmanagedCallConv As CallingConvention, returnType As Type, parameterTypes As Type())
Public Overridable Sub EmitCalli (opcode As OpCode, unmanagedCallConv As CallingConvention, returnType As Type, parameterTypes As Type())
Public Sub EmitCalli (opcode As OpCode, unmanagedCallConv As CallingConvention, returnType As Type, parameterTypes As Type())

Parameter

opcode
OpCode

Die MSIL-Anweisung, die im Datenstrom ausgegeben werden soll. Muss Calli sein.

unmanagedCallConv
CallingConvention

Die nicht verwaltete Aufrufkonvention, die verwendet werden soll.

returnType
Type

Das Type Ergebnis.

parameterTypes
Type[]

Die Typen der erforderlichen Argumente für die Anweisung.

Beispiele

Im folgenden Codebeispiel wird die kontextbezogene Verwendung der EmitCalli Methode veranschaulicht, um eine nicht verwaltete Typmethode außerhalb der dynamischen Klasse aufzurufen.

MethodBuilder myMthdBuilder = myTypeBuilder.DefineMethod("MyMethod",
                  MethodAttributes.Public,
                  returnType, mthdParamTypes);
                            
// We will assume that an external unmanaged type "LegacyNumber" has been loaded, and
// that it has a method "ToString" which returns a string.

MethodInfo unmanagedMthdMI = Type.GetType("LegacyNumber").GetMethod("ToString");
ILGenerator myMthdIL = myMthdBuilder.GetILGenerator();

// Code to emit various IL opcodes here ...

// Load a reference to the specific object instance onto the stack.

myMthdIL.Emit(OpCodes.Ldc_I4, addrOfLegacyNumberObject);
myMthdIL.Emit(OpCodes.Ldobj, Type.GetType("LegacyNumber"));

// Make the call to the unmanaged type method, telling it that the method is
// the member of a specific instance, to expect a string
// as a return value, and that there are no explicit parameters.
myMthdIL.EmitCalli(OpCodes.Calli,
           System.Runtime.InteropServices.CallingConvention.ThisCall,
               typeof(string),
           new Type[] {});

// More IL code emission here ...
    Dim myMthdBuilder As MethodBuilder = myTypeBuilder.DefineMethod("MyMethod", _
                    MethodAttributes.Public, _
                    returnType, mthdParamTypes)
  
    ' We will assume that an external unmanaged type "LegacyNumber" has been loaded, and
    ' that it has a method "ToString" which returns a string.

    Dim unmanagedMthdMI As MethodInfo = Type.GetType("LegacyNumber").GetMethod("ToString")
    Dim myMthdIL As ILGenerator = myMthdBuilder.GetILGenerator()
  
    ' Code to emit various IL opcodes here ...
    ' Load a reference to the specific object instance onto the stack.

    myMthdIL.Emit(OpCodes.Ldc_I4, addrOfLegacyNumberObject)
    myMthdIL.Emit(OpCodes.Ldobj, Type.GetType("LegacyNumber"))
  
    ' Make the call to the unmanaged type method, telling it that the method is
    ' the member of a specific instance, to expect a string 
    ' as a return value, and that there are no explicit parameters.

    myMthdIL.EmitCalli(OpCodes.Calli, System.Runtime.InteropServices.CallingConvention.ThisCall, _
                  GetType(String), New Type() {})

' More IL code emission here ...

Hinweise

Verwenden Sie diese Anweisung EmitCalli , um eine Calli Anweisung in den Datenstrom einzufügen. Verwenden Sie nicht Emit.

Gilt für:

EmitCalli(OpCode, CallingConventions, Type, Type[], Type[])

Quelle:
ILGenerator.cs
Quelle:
ILGenerator.cs
Quelle:
ILGenerator.cs
Quelle:
ILGenerator.cs
Quelle:
ILGenerator.cs

Fügt eine Calli-Anweisung in den Microsoft MSIL-Datenstrom (Intermediate Language) und gibt eine verwaltete Anrufkonvention für den indirekten Anruf an.

public:
 abstract void EmitCalli(System::Reflection::Emit::OpCode opcode, System::Reflection::CallingConventions callingConvention, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, cli::array <Type ^> ^ optionalParameterTypes);
public:
 virtual void EmitCalli(System::Reflection::Emit::OpCode opcode, System::Reflection::CallingConventions callingConvention, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, cli::array <Type ^> ^ optionalParameterTypes);
public:
 void EmitCalli(System::Reflection::Emit::OpCode opcode, System::Reflection::CallingConventions callingConvention, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, cli::array <Type ^> ^ optionalParameterTypes);
public abstract void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Reflection.CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, Type[]? optionalParameterTypes);
public virtual void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Reflection.CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, Type[]? optionalParameterTypes);
public virtual void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type[] optionalParameterTypes);
public void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type[] optionalParameterTypes);
abstract member EmitCalli : System.Reflection.Emit.OpCode * System.Reflection.CallingConventions * Type * Type[] * Type[] -> unit
abstract member EmitCalli : System.Reflection.Emit.OpCode * System.Reflection.CallingConventions * Type * Type[] * Type[] -> unit
override this.EmitCalli : System.Reflection.Emit.OpCode * System.Reflection.CallingConventions * Type * Type[] * Type[] -> unit
member this.EmitCalli : System.Reflection.Emit.OpCode * System.Reflection.CallingConventions * Type * Type[] * Type[] -> unit
Public MustOverride Sub EmitCalli (opcode As OpCode, callingConvention As CallingConventions, returnType As Type, parameterTypes As Type(), optionalParameterTypes As Type())
Public Overridable Sub EmitCalli (opcode As OpCode, callingConvention As CallingConventions, returnType As Type, parameterTypes As Type(), optionalParameterTypes As Type())
Public Sub EmitCalli (opcode As OpCode, callingConvention As CallingConventions, returnType As Type, parameterTypes As Type(), optionalParameterTypes As Type())

Parameter

opcode
OpCode

Die MSIL-Anweisung, die im Datenstrom ausgegeben werden soll. Muss Calli sein.

callingConvention
CallingConventions

Die zu verwendende verwaltete Anrufkonvention.

returnType
Type

Das Type Ergebnis.

parameterTypes
Type[]

Die Typen der erforderlichen Argumente für die Anweisung.

optionalParameterTypes
Type[]

Die Typen der optionalen Argumente für varargs Aufrufe.

Ausnahmen

optionalParameterTypes ist nicht null, aber callingConvention enthält nicht die VarArgs Kennzeichnung.

Hinweise

Verwenden Sie diese Anweisung EmitCalli , um eine Calli Anweisung in den Datenstrom einzufügen. Verwenden Sie nicht Emit.

Wenn optionalParameterTypes optionale Argumente angegeben werden, callingConvention muss die CallingConventions.VarArgs Kennzeichnung enthalten sein.

Gilt für: