extern (C#-Referenz)

 

Die neueste Dokumentation zu Visual Studio 2017 RC finden Sie unter Visual Studio 2017 RC Documentation (Dokumentation zu Visual Studio 2017 RC).

Der extern-Modifizierer wird verwendet, um eine extern implementierte Methode zu deklarieren. Der extern-Modifizierer wird häufig mit dem DllImport-Attribut verwendet, wenn Sie nicht verwalteten Code mit Interop-Diensten aufrufen. In diesem Fall muss die Methode auch als static deklariert werden, wie im folgenden Beispiel gezeigt:

[DllImport("avifil32.dll")]  
private static extern void AVIFileInit();  

Das extern-Schlüsselwort kann ebenso einen externen Assemblyalias definieren. Dadurch wird es möglich, aus einer einzigen Assembly heraus auf unterschiedliche Versionen derselben Komponente zu verweisen. Weitere Informationen finden Sie unter extern-Alias.

Der abstract-Modifizierer und der extern-Modifizierer dürfen nicht gleichzeitig auf demselben Member angewendet werden. So bedeutet die Verwendung des extern-Modifizierers, dass die Methode außerhalb des C#-Codes implementiert wird, während bei Verwendung des abstract-Modifizierers die Methodenimplementierung nicht in der Klasse bereitgestellt wird.

Die Verwendung des extern-Schlüsselworts ist in C# eingeschränkter als in C++. Informationen zum Vergleichen des C#-Schlüsselworts mit dem C++-Schlüsselwort finden Sie unter "Using extern to Specify Linkage" in der C++-Sprachreferenz.

Beispiel 1. In diesem Beispiel empfängt das Programm eine Zeichenfolge vom Benutzer und zeigt sie in einem Meldungsfeld an. Das Programm verwendet die MessageBox-Methode, die von der User32.dll-Bibliothek importiert wurde.

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

    }

Beispiel 2. Dieses Beispiel veranschaulicht ein C#-Programm, das eine C-Bibliothek aufruft (eine systemeigene DLL).

  1. Erstellen Sie die folgende C-Datei mit dem Namen cmdll.c:
// cmdll.c  
// Compile with: /LD  
int __declspec(dllexport) SampleMethod(int i)  
{  
   return i*10;  
}  

  1. Öffnen Sie ein Visual Studio x64 (oder x32) Native Tools-Eingabeaufforderungsfenster im Visual Studio-Installationsverzeichnis, und kompilieren Sie die cmdll.c-Datei, indem Sie an der Eingabeaufforderung cl /LD cmdll.c eingeben.

  2. Erstellen Sie im gleichen Verzeichnis die folgende C#-Datei mit dem Namen 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));  
   }  
}  

  1. Öffnen Sie ein Visual Studio x64 (oder x32) Native Tools-Eingabeaufforderungsfenster im Visual Studio-Installationsverzeichnis, und kompilieren Sie die cm.cs-Datei, indem Sie Folgendes eingeben:

csc cm.cs (für die x64-Eingabeaufforderung)
– oder –
csc /platform:x86 cm.cs (für die x32-Eingabeaufforderung)

Dadurch wird die ausführbare Datei cm.exe erstellt.

  1. Führen Sie cm.exe aus. Die SampleMethod-Methode übergibt den Wert 5 an die DLL-Datei, die den mit 10 multiplizierten Wert zurückgibt. Das Programm generiert die folgende Ausgabe:
SampleMethod() returns 50.  

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

System.Runtime.InteropServices.DllImportAttribute
C#-Referenz
C#-Programmierhandbuch
C#-Schlüsselwörter
Modifizierer

Anzeigen: