ILGenerator.EmitCalli Método

Definição

Coloca uma instrução Calli no fluxo de Microsoft linguagem intermediária (MSIL).

Sobrecargas

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

Coloca uma instrução Calli no fluxo de Microsoft linguagem intermediária (MSIL), especificando uma convenção de chamada não gerenciada para a chamada indireta.

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

Coloca uma instrução Calli no fluxo de Microsoft linguagem intermediária (MSIL), especificando uma convenção de chamada gerenciada para a chamada indireta.

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

Coloca uma instrução Calli no fluxo de Microsoft linguagem intermediária (MSIL), especificando uma convenção de chamada não gerenciada para a chamada indireta.

public:
 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, Type[] parameterTypes);
public virtual void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Runtime.InteropServices.CallingConvention unmanagedCallConv, Type returnType, Type[] parameterTypes);
member this.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
Public 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())

Parâmetros

opcode
OpCode

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

unmanagedCallConv
CallingConvention

A convenção de chamada não gerenciada a ser usada.

returnType
Type

O Type resultado.

parameterTypes
Type[]

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

Exemplos

O exemplo de código a seguir demonstra o uso contextual do EmitCalli método para chamar um método de tipo não gerenciado 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 ...

Comentários

Use EmitCalli para colocar uma Calli instrução no fluxo. Não use Emit.

Aplica-se a

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

Coloca uma instrução Calli no fluxo de Microsoft linguagem intermediária (MSIL), especificando uma convenção de chamada gerenciada para a chamada indireta.

public:
 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, Type[] parameterTypes, Type[] optionalParameterTypes);
public virtual void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type[] optionalParameterTypes);
member this.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
Public 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())

Parâmetros

opcode
OpCode

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

callingConvention
CallingConventions

A convenção de chamada gerenciada a ser usada.

returnType
Type

O Type resultado.

parameterTypes
Type[]

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

optionalParameterTypes
Type[]

Os tipos de argumentos opcionais para varargs chamadas.

Exceções

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

Comentários

Use EmitCalli para colocar uma Calli instrução no fluxo. Não use Emit.

Se optionalParameterTypes especificar argumentos opcionais, callingConvention deverá incluir o CallingConventions.VarArgs sinalizador.

Aplica-se a