Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
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 Uso de extern para especificar vinculación en la referencia del lenguaje C++.
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).
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; }
Abra una ventana del símbolo del sistema de las herramientas nativas de Visual Studio x64 (o x32) desde el directorio de instalación de Visual Studio y compile el archivo
cmdll.c
escribiendo cl -LD cmdll.c en el símbolo del sistema.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)); } }
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
.Ejecute
cm.exe
. El métodoSampleMethod
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#.