Ler em inglês

Partilhar via


ILGenerator.EmitCalli Método

Definição

Coloca uma instrução Calli no fluxo do MSIL (Microsoft Intermediate Language).

Sobrecargas

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

Coloca uma instrução Calli no fluxo da MSIL (Microsoft Intermediate Language), 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 da MSIL (Microsoft Intermediate Language), especificando uma convenção de chamada gerenciada para a chamada indireta.

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

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

Coloca uma instrução Calli no fluxo da MSIL (Microsoft Intermediate Language), especificando uma convenção de chamada não gerenciada para a chamada indireta.

C#
public abstract void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Runtime.InteropServices.CallingConvention unmanagedCallConv, Type? returnType, Type[]? parameterTypes);
C#
public virtual void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Runtime.InteropServices.CallingConvention unmanagedCallConv, Type? returnType, Type[]? parameterTypes);
C#
public virtual void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Runtime.InteropServices.CallingConvention unmanagedCallConv, Type returnType, Type[] parameterTypes);
C#
public void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Runtime.InteropServices.CallingConvention unmanagedCallConv, Type returnType, Type[] parameterTypes);

Parâmetros

opcode
OpCode

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

unmanagedCallConv
CallingConvention

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

returnType
Type

O Type do 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.

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

Comentários

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

Aplica-se a

.NET 10 e outras versões
Produto Versões
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.1

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

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

Coloca uma instrução Calli no fluxo da MSIL (Microsoft Intermediate Language), especificando uma convenção de chamada gerenciada para a chamada indireta.

C#
public abstract void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Reflection.CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, Type[]? optionalParameterTypes);
C#
public virtual void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Reflection.CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, Type[]? optionalParameterTypes);
C#
public virtual void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type[] optionalParameterTypes);
C#
public void EmitCalli(System.Reflection.Emit.OpCode opcode, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type[] optionalParameterTypes);

Parâmetros

opcode
OpCode

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

callingConvention
CallingConventions

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

returnType
Type

O Type do resultado.

parameterTypes
Type[]

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

optionalParameterTypes
Type[]

Os tipos de argumentos opcionais para chamadas varargs.

Exceções

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

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

.NET 10 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided), 2.1