ILGenerator.EmitCalli Método

Definição

Coloca uma instrução Calli no fluxo Microsoft da língua intermédia (MSIL).

Sobrecargas

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

Coloca uma instrução Calli no fluxo da linguagem intermédia Microsoft (MSIL), especificando uma convenção de chamada não gerida para a chamada indireta.

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

Coloca uma instrução Calli no fluxo da linguagem intermédia Microsoft (MSIL), especificando uma convenção de chamada gerida para a chamada indireta.

EmitCalli(Type)

Origem:
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)

Parâmetros

functionPointerType
Type

Aplica-se a

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

Origem:
ILGenerator.cs
Origem:
ILGenerator.cs
Origem:
ILGenerator.cs
Origem:
ILGenerator.cs
Origem:
ILGenerator.cs

Coloca uma instrução Calli no fluxo da linguagem intermédia Microsoft (MSIL), especificando uma convenção de chamada não gerida para a chamada indireta.

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

Parâmetros

opcode
OpCode

A instrução MSIL para ser emitida no fluxo. Deve ser Calli.

unmanagedCallConv
CallingConvention

A convenção de chamadas não geridas a ser usada.

returnType
Type

O Type resultado do resultado.

parameterTypes
Type[]

Os tipos dos argumentos necessários para a instrução.

Exemplos

O exemplo de código seguinte demonstra o uso contextual do EmitCalli método para chamar um método de tipo não gerido externo à classe dinâmica.

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

Observações

Usa EmitCalli para colocar uma Calli instrução no stream. Não utilize Emit.

Aplica-se a

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

Origem:
ILGenerator.cs
Origem:
ILGenerator.cs
Origem:
ILGenerator.cs
Origem:
ILGenerator.cs
Origem:
ILGenerator.cs

Coloca uma instrução Calli no fluxo da linguagem intermédia Microsoft (MSIL), especificando uma convenção de chamada gerida para a chamada indireta.

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

Parâmetros

opcode
OpCode

A instrução MSIL para ser emitida no fluxo. Deve ser Calli.

callingConvention
CallingConventions

A convenção de chamadas geridas a ser utilizada.

returnType
Type

O Type resultado do resultado.

parameterTypes
Type[]

Os tipos dos argumentos necessários para a instrução.

optionalParameterTypes
Type[]

Os tipos dos argumentos opcionais para varargs chamadas.

Exceções

optionalParameterTypes não nullé , mas callingConvention não inclui a VarArgs bandeira.

Observações

Usa EmitCalli para colocar uma Calli instrução no stream. Não utilize Emit.

Se optionalParameterTypes especificar argumentos opcionais, callingConvention deve incluir a CallingConventions.VarArgs bandeira.

Aplica-se a