Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

CallingConvention (Enumeración)

Especifica la convención de llamada necesaria para llamar a métodos implementados en código no administrado.

Espacio de nombres:  System.Runtime.InteropServices
Ensamblado:  mscorlib (en mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum CallingConvention

Nombre de miembroDescripción
Compatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCdeclEl llamador limpia la pila. Esto permite llamar a funciones con varargs, que resulta apropiado para métodos que aceptan un número variable de parámetros, como Printf.
FastCallNo se admite esta convención de llamada.
Compatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsStdCallEl destinatario de la llamada limpia la pila. Esta es la convención predeterminada para la llamada a funciones no administradas con invocación de plataforma.
Compatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsThisCallEl primer parámetro es el puntero this y se almacena en ECX de registro. Los demás parámetros se insertan en la pila. Esta convención de llamada se utiliza para llamar a métodos en clases exportadas desde un archivo DLL no administrado.
Compatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsWinapiEste miembro no es una convención de llamada en realidad, sino que utiliza la convención de llamada de plataforma predeterminada. Por ejemplo, en Windows la convención de llamada predeterminada es StdCall y en Windows CE.NET es Cdecl.

Hay que utilizar siempre la enumeración CallingConvention en lugar de la enumeración CALLCONV para especificar una convención de llamada en código administrado. Esta última sólo existe para las definiciones COM. DllImportAttribute y varias clases de System.Reflection.Emit utilizan la enumeración CallingConvention para emitir firmas de invocación de plataforma dinámicamente.

En el siguiente ejemplo se muestra la forma de aplicar la convención de llamada Cdecl, que debe utilizarse porque el llamador ha limpiado la pila.


using System;
using System.Runtime.InteropServices;

public class LibWrap
{
// C# doesn't support varargs so all arguments must be explicitly defined.
// CallingConvention.Cdecl must be used since the stack is 
// cleaned up by the caller.

// int printf( const char *format [, argument]... )

[DllImport("msvcrt.dll", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.Cdecl)]
public static extern int printf(String format, int i, double d); 

[DllImport("msvcrt.dll", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.Cdecl)]
public static extern int printf(String format, int i, String s); 
}

public class App
{
    public static void Main()
    {
        LibWrap.printf("\nPrint params: %i %f", 99, 99.99);
        LibWrap.printf("\nPrint params: %i %s", 99, "abcd");
    }
}


.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft