ILGenerator.EmitCalli Metod

Definition

Placerar en Calli instruktion på msil-strömmen (Microsoft mellanliggande språk).

Överlagringar

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

Placerar en Calli instruktion på msil-strömmen (Microsoft mellanliggande språk) och anger en ohanterad anropskonvention för det indirekta anropet.

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

Placerar en Calli-instruktion på msil-strömmen (Microsoft mellanliggande språk) och anger en hanterad anropskonvention för det indirekta anropet.

EmitCalli(Type)

Källa:
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)

Parametrar

functionPointerType
Type

Gäller för

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

Källa:
ILGenerator.cs
Källa:
ILGenerator.cs
Källa:
ILGenerator.cs
Källa:
ILGenerator.cs
Källa:
ILGenerator.cs

Placerar en Calli instruktion på msil-strömmen (Microsoft mellanliggande språk) och anger en ohanterad anropskonvention för det indirekta anropet.

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())

Parametrar

opcode
OpCode

MSIL-instruktionen som ska skickas till dataströmmen. Måste vara Calli.

unmanagedCallConv
CallingConvention

Den ohanterade anropskonvention som ska användas.

returnType
Type

Resultatets Type resultat.

parameterTypes
Type[]

Typerna av de argument som krävs för instruktionen.

Exempel

Följande kodexempel visar den kontextuella användningen av EmitCalli metoden för att anropa en ohanterad typmetod utanför den dynamiska klassen.

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 ...

Kommentarer

Använd EmitCalli för att lägga en Calli instruktion på strömmen. Använd inte Emit.

Gäller för

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

Källa:
ILGenerator.cs
Källa:
ILGenerator.cs
Källa:
ILGenerator.cs
Källa:
ILGenerator.cs
Källa:
ILGenerator.cs

Placerar en Calli-instruktion på msil-strömmen (Microsoft mellanliggande språk) och anger en hanterad anropskonvention för det indirekta anropet.

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())

Parametrar

opcode
OpCode

MSIL-instruktionen som ska skickas till dataströmmen. Måste vara Calli.

callingConvention
CallingConventions

Den konvention för hanterade samtal som ska användas.

returnType
Type

Resultatets Type resultat.

parameterTypes
Type[]

Typerna av de argument som krävs för instruktionen.

optionalParameterTypes
Type[]

Typerna av valfria argument för varargs anrop.

Undantag

optionalParameterTypes är inte null, men callingConvention innehåller VarArgs inte flaggan.

Kommentarer

Använd EmitCalli för att lägga en Calli instruktion på strömmen. Använd inte Emit.

Om optionalParameterTypes anger valfria argument callingConvention måste du CallingConventions.VarArgs inkludera flaggan.

Gäller för