Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo ILGenerator.EmitCalli (OpCode, CallingConvention, Type, Type[])

 

Data di pubblicazione: ottobre 2016

Inserisce un Calli istruzione nel flusso Microsoft intermediate language (MSIL), specificando una convenzione di chiamata non gestita per la chiamata indiretta.

Spazio dei nomi:   System.Reflection.Emit
Assembly:  mscorlib (in mscorlib.dll)

public virtual void EmitCalli(
	OpCode opcode,
	CallingConvention unmanagedCallConv,
	Type returnType,
	Type[] parameterTypes
)

Parametri

opcode
Type: System.Reflection.Emit.OpCode

L'istruzione MSIL da creare nel flusso. Deve essere OpCodes.Calli.

unmanagedCallConv
Type: System.Runtime.InteropServices.CallingConvention

La convenzione di chiamata non gestita da utilizzare.

returnType
Type: System.Type

Il Type del risultato.

parameterTypes
Type: System.Type[]

I tipi di argomenti necessari per l'istruzione.

UtilizzareEmitCalli per inserire un Calli istruzione nel flusso. Non utilizzare Emit.

Esempio di codice riportato di seguito viene illustrato l'utilizzo contestuale del EmitCalli metodo per chiamare un metodo di tipo non gestito esterno alla classe dinamica.

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

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: