Partager via


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 indiqué 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.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);
        }

    }

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

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 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.

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#