extern (référence C#)
Le modificateur extern
permet de déclarer une méthode qui est implémentée en externe. Le modificateur extern
est souvent utilisé avec l'attribut DllImport
lors de l'utilisation de services Interop à appeler dans du code non managé. Dans ce cas, la méthode doit également être déclarée comme static
, comme indiqué dans l'exemple suivant :
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
Le mot clé extern
peut également définir un alias d'assembly externe, permettant ainsi de référencer différentes versions du même composant à partir d'un seul assembly. Pour plus d’informations, consultez extern alias.
C’est une erreur d’utiliser conjointement les modificateurs abstract et extern
pour modifier le même membre. L'utilisation du modificateur extern
signifie que la méthode est implémentée en dehors du code C#, tandis que l'utilisation du modificateur abstract
signifie que l'implémentation de la méthode n'est pas effectuée dans la classe.
L'utilisation du mot clé extern est plus restreinte dans C# que dans C++. Pour comparer son utilisation dans C# et C++, consultez : Utilisation d'externe pour spécifier la liaison dans le Guide de référence du langage C++.
Exemple 1
Dans cet exemple, le programme reçoit une chaîne provenant de l’utilisateur et l’affiche dans une boîte de message. Le programme utilise la méthode MessageBox
importée de la bibliothèque 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);
}
}
Exemple 2
Cet exemple illustre un programme C# qui fait appel à une bibliothèque C (une DLL native).
Créez le fichier C suivant et nommez-le
cmdll.c
:// cmdll.c // Compile with: -LD int __declspec(dllexport) SampleMethod(int i) { return i*10; }
Ouvrez une fenêtre d’invite de commandes d’outils natifs Visual Studio x64 (ou x32) à partir du répertoire d’installation de Visual Studio et compilez le fichier
cmdll.c
en tapant cl -LD cmdll.c à l’invite de commandes.Dans le même répertoire, créez le fichier C# suivant et nommez-le
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)); } }
Ouvrez une fenêtre d'invite de commandes d'outils natifs Visual Studio x64 (ou x32) à partir du répertoire d'installation de Visual Studio et compilez le fichier
cm.cs
en tapant :csc cm.cs (pour l’invite de commandes x64) —ou— csc -platform:x86 cm.cs (pour l’invite de commandes x32)
Cette opération crée le fichier exécutable
cm.exe
.Exécuter
cm.exe
. La méthodeSampleMethod
passe la valeur 5 au fichier DLL, qui retourne la valeur multipliée par 10. Le programme génère la sortie suivante :SampleMethod() returns 50.
spécification du langage C#
Pour plus d'informations, voir la spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.