Compartir a través de


extern (Referencia de C#)

El modificador extern se utiliza para declarar un método que se implementa externamente.Un uso común del modificador extern es con el atributo DllImport cuando se utilizan servicios de interoperabilidad para llamar a código no administrado.En este caso, el método se debe declarar también como static, como se muestra en el ejemplo siguiente:

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

[!NOTA]

La palabra clave extern también puede definir un alias de ensamblado externo, lo que hace posible hacer referencia a diferentes versiones del mismo componente desde un único ensamblado.Para obtener más información, vea alias externo (Referencia de C#).

Es incorrecto utilizar simultáneamente los modificadores abstract (Referencia de C#) y extern para modificar el mismo miembro.El uso del modificador extern significa que el método se implementa fuera del código de C#, mientras que el uso del modificador abstract significa que la clase no proporciona la implementación del método.

[!NOTA]

El uso de la palabra clave extern es más limitado que en C++.Para compararla con la palabra clave de C++, vea Mediante extern para especificar Linkage en la Referencia del lenguaje C++.

Ejemplo

En este ejemplo, el programa recibe una cadena del usuario y la muestra dentro de un cuadro de mensaje.El programa utiliza el método MessageBox importado de la biblioteca User32.dll.

    //using System.Runtime.InteropServices;
    class ExternTest
    {
        [DllImport("User32.dll", CharSet=CharSet.Unicode)] 
        public static extern int MessageBox(IntPtr h, string m, string c, int type);

        static int Main()
        {
            string myString;
            Console.Write("Enter your message: ");
            myString = Console.ReadLine();
            return MessageBox((IntPtr)0, myString, "My Message Box", 0);
        }

    }

En este ejemplo se crea un archivo DLL desde un programa de C invocado desde el programa de C# del siguiente ejemplo.

// cmdll.c
// Compile with: /LD
int __declspec(dllexport) SampleMethod(int i)
{
   return i*10;
}

Este ejemplo utiliza dos archivos, CM.cs y Cmdll.c, para demostrar el uso de extern.El archivo C es un archivo DLL externo creado en el ejemplo 2 que se invoca desde el programa escrito en C#.

// cm.cs
using System;
using System.Runtime.InteropServices;
public class MainClass 
{
   [DllImport("Cmdll.dll")]
   public static extern int SampleMethod(int x);

   static void Main() 
   {
      Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));
   }
}
  

Comentarios

Para compilar el proyecto:

  • Compile Cmdll.c como una DLL mediante la línea de comandos de Visual C++:

    cl /LD Cmdll.c

  • Compile CM.cs mediante la línea de comandos:

    csc CM.cs

De esta forma, se creará el archivo ejecutable CM.exe.Cuando ejecute este programa, SampleMethod pasará el valor 5 al archivo DLL, el cual devolverá el valor multiplicado por 10.

Especificación del lenguaje C#

Para obtener más información, vea la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también

Referencia

Palabras clave de C#

Modificadores (Referencia de C#)

System.Runtime.InteropServices.DllImportAttribute

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#