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

Concepts

Guide de programmation C#

Autres ressources

Référence C#