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 d'interopérabilité à appeler dans du code non managé ; dans ce cas, la méthode doit également être déclarée comme static, comme illustré dans l'exemple suivant :
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
Notes
Le mot clé extern peut également définir un alias d'assembly externe, permettant ainsi de référencer des versions différentes du même composant à partir d'un seul assembly. Pour plus d'informations, consultez extern alias (Référence C#).
L'utilisation conjointe des modificateurs abstract (Référence C#) et extern pour modifier le même membre est une erreur. 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.
Notes
L'utilisation du mot clé extern est plus limitée qu'en C++. Pour effectuer la comparaison avec le mot clé C++, consultez Using extern to Specify Linkage dans Référence du langage C++.
Exemple
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;
using System.Runtime.InteropServices;
class MainClass
{
[DllImport("User32.dll")]
public static extern int MessageBox(int h, string m, string c, int type);
static int Main()
{
string myString;
Console.Write("Enter your message: ");
myString = Console.ReadLine();
return MessageBox(0, myString, "My Message Box", 0);
}
}
Cet exemple crée une DLL à partir d'un programme C qui est appelé depuis le programme C# dans l'exemple suivant.
// cmdll.c
// compile with: /LD
int __declspec(dllexport) SampleMethod(int i)
{
return i*10;
}
Cet exemple utilise deux fichiers, CM.cs
et Cmdll.c
, pour illustrer le mot clé extern. Le fichier C est la DLL externe créée dans l'exemple 2, appelée depuis le programme 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));
}
}
Sortie
SampleMethod() returns 50. |
Notes
Pour générer le projet :
Compilez
Cmdll.c
dans une DLL à l'aide de la ligne de commande Visual C++ :cl /LD Cmdll.c
Compilez
CM.cs
à l'aide de la ligne de commande :csc CM.cs
Cela crée le fichier exécutable CM.exe
. Lorsque vous exécutez ce programme, SampleMethod
passe la valeur 5 au fichier DLL, qui retourne la valeur multipliée par 10.
Spécification du langage C#
Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.
- 10.5.7 Méthodes externes
Voir aussi
Référence
Mots clés C#
Modificateurs (Référence C#)
System.Runtime.InteropServices.DllImportAttribute