Share via


extern (Referencia de C#)

El modificador extern se usa para declarar un método que se implementa externamente. Un uso común del modificador extern es con el atributo DllImport al usar 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();

La palabra clave extern también puede definir un alias del ensamblado externo, lo que permite 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 un error usar los modificadores abstract y extern juntos 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 implementación del método no se proporciona en la clase.

La palabra clave extern tiene usos más limitados en C# que en C++. Para comparar la palabra clave de C# con la de C++, consulte el tema sobre el uso de extern para especificar vinculación en la referencia del lenguaje C++.

Ejemplo

Ejemplo 1. En este ejemplo, el programa recibe una cadena del usuario y la muestra en un cuadro de mensaje. El programa usa 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);
        }

    }

Ejemplo 2. En este ejemplo se muestra un programa de C# que llama a una biblioteca de C (una DLL nativa).

1. Cree el archivo de C siguiente y denomínelo cmdll.c:

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

2. Abra una ventana del símbolo del sistema de las herramientas nativas de Visual Studio x64 (o x32) del directorio de instalación de Visual Studio y compile el archivo cmdll.c escribiendo cl /LD cmdll.c en el símbolo del sistema.

3. En el mismo directorio, cree el siguiente archivo de C# y denomínelo cm.cs:

// 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));
   }
}

3. Abra una ventana del símbolo del sistema de las herramientas nativas de Visual Studio x64 (o x32) del directorio de instalación de Visual Studio y compile el archivo cm.cs escribiendo:

csc cm.cs (para el símbolo del sistema x64) o bien,csc /platform:x86 cm.cs (para el símbolo del sistema x32)

De esta forma, se creará el archivo ejecutable cm.exe.

4. Ejecute cm.exe. El método SampleMethod pasa el valor 5 al archivo DLL, que devuelve el valor multiplicado por 10. El programa produce el siguiente resultado:

SampleMethod() returns 50.

Especificación del lenguaje C#

Para obtener más información, consulte 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#)

DllImportAttribute

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#