Share via


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 Using extern to Specify 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#