Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Es ist ein Fehler, den abstract-Modifizierer und den extern
-Modifizierer gleichzeitig auf demselben Member anzuwenden. 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 finden Sie unter Verwenden von „extern“ zur Angabe der Verknüpfung 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 native DLL).
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; }
Öffnen Sie ein Visual Studio x64 (oder x32) Native Tools-Eingabeaufforderungsfenster im Visual Studio-Installationsverzeichnis, und kompilieren Sie die
cmdll.c
-Datei, indem Sie in der Eingabeaufforderung cl -LD cmdll.c eingeben.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)); } }
Ö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.Führen Sie
cm.exe
aus. DieSampleMethod
-Methode übergibt den Wert 5 an die DLL-Datei, die den mit 10 multiplizierten Wert zurückgibt. Das Programm erzeugt die folgende Ausgabe:SampleMethod() returns 50.
C#-Sprachspezifikation
Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.