Technologiebeispiel für Plattformaufrufe
Aktualisiert: November 2007
In diesem Beispiel werden Verfahren zum Aufrufen von Funktionen veranschaulicht, die von einer nicht verwalteten Bibliothek exportiert werden. Sie erfahren, wie Sie die folgenden Aktionen ausführen können:
Deklarieren unterschiedlicher Typen
Verwenden von verfügbaren Attribute zum Ändern des Standardverhaltens
Verwenden von Methoden des Marshal-Typs
Bestimmen der Aspekte von Garbage Collection und Threading mit möglichen Auswirkungen auf die Ergebnisse
In einigen der Beispiele werden von Windows-Bibliotheken exportierte Funktionen verwendet, in anderen von einer benutzerdefinierten Bibliothek exportierte Funktionen. In bestimmten Beispielen werden Bibliotheken verwendet, die nicht auf allen Windows-Plattformen verfügbar sind, oder Funktionen in einer Weise, die nicht von allen Windows-Plattformen unterstützt wird. Dennoch müssen Sie sich bestimmter Regeln zum Aufrufen von Plattformen bewusst sein, die in einem Beispiel verwendet werden.
In diesen Beispielen wird die folgende Verzeichnisstruktur verwendet:
Verzeichnis |
Inhalt |
---|---|
WinAPIs |
Es werden Plattformaufrufe mit von Windows-Bibliotheken exportierten Funktionen veranschaulicht. |
WinAPIs\CS |
In C# geschriebene Quellen |
WinAPIs\VB |
In Visual Basic geschriebene Quellen |
Custom |
Es werden Plattformaufrufe mit von einer benutzerdefinierten Bibliothek exportierten Funktionen veranschaulicht. |
Custom\CS |
In C# geschriebene Quellen |
Custom\LIB |
Benutzerdefinierte Typbibliothekquelle |
Custom\VB |
In VB geschriebene Quellen |
Informationen zur Verwendung der Beispiele finden Sie unter den folgenden Themen:
So erstellen Sie die Beispiele über die Eingabeaufforderung
Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu einem der sprachspezifischen Unterverzeichnisse.
Geben Sie in der Befehlszeile msbuild [Dateiname].sln ein.
Hinweis: Die Beispiele für benutzerdefinierte Plattformaufrufe können nur mit Visual Studio erstellt werden.
So erstellen Sie die Beispiele in Visual Studio
Öffnen Sie Windows Explorer, und navigieren Sie zu einem der sprachspezifischen Unterverzeichnisse.
Doppelklicken Sie auf das Symbol für [Dateiname].sln, um die Datei in Visual Studio zu öffnen.
Wählen Sie im Menü Erstellen die Option Projektmappe erstellen aus.
So führen Sie die Beispiele aus
Navigieren Sie zu einem der sprachspezifischen Verzeichnisse unter dem Verzeichnis WinAPIs oder Custom, das die erstellten ausführbaren Dateien enthält.
Geben Sie in der Befehlszeile den Namen der ausführbaren Datei ein.
Hinweis: In diesem Beispiel werden Konsolenanwendungen erstellt. Sie müssen sie über die Eingabeaufforderung starten, um die Ausgabe anzuzeigen.
Anforderungen
Für diese Beispiele sind Windows-Header erforderlich. Diese sind verfügbar, wenn Sie das Projekt über Microsoft Visual Studio 2005 oder die Visual Studio 2005-Eingabeaufforderung erstellen bzw. das Platform SDK installiert und in einem Includepfad angegeben haben.
Hinweise
In der folgenden Tabelle werden die Themen zusammengefasst, die in den Beispielen veranschaulicht werden. Außerdem werden die Speicherorte der Quelldateien für das bzw. die zugehörigen Beispiele aufgelistet.
So werden Plattformaufrufattribute verwendet
Attribut |
Beschreibung |
Beispiel |
---|---|---|
EntryPoint |
Benennt eine Funktion für die Verwendung in verwaltetem Code um. |
WinAPIs\CS\MsgBox.cs WinAPIs\VB\MsgBox.vb |
CharSet |
Wählt aus, wie Zeichenfolgen gemarshallt werden. Wirkt sich auch auf die Kriterien für die Suche nach Funktionsnamen aus. |
WinAPIs\CS\MsgBox.cs WinAPIs\VB\MsgBox.vb |
ExactSpelling |
Gibt an, ob der Name des Einstiegspunkts in der nicht verwalteten DLL so geändert werden soll, dass er dem CharSet-Wert entspricht. |
WinAPIs\CS\MsgBox.cs WinAPIs\VB\MsgBox.vb |
CallingConvention |
Ruft Funktionen mit varargs auf. |
WinAPIs\CS\Printf.cs WinAPIs\VB\Printf.vb |
PreserveSig |
Ändert Funktionen, die HRESULTs zurückgeben. |
WinAPIs\CS\CreateObject.cs WinAPIs\VB\CreateObject.vb |
SetLastError |
Stellt sicher, dass der Fehlercode nach einem Funktionsaufruf gespeichert wird. |
WinAPIs\CS\Errors.cs WinAPIs\VB\Errors.vb |
So werden Strukturen und Unions gemarshallt
Typ |
Beschreibung |
Beispiel |
---|---|---|
Struktur ByVal |
Übergibt eine Struktur als In-Parameter. |
Custom\CS\Structs.cs Custom\VB\Structs.vb |
Struktur ByRef |
Übergibt eine Struktur als In/Out-Parameter. |
WinAPIs\CS\OSInfo.cs WinAPIs\VB\OSInfo.vb |
Klasse ByVal |
Übergibt eine Klasse mit ausschließlich ganzzahligen Membern als In/Out-Parameter. |
WinAPIs\CS\SysTime.cs WinAPIs\VB\SysTime.vb |
Struktur mit geschachtelten Strukturen (flach) |
Erstellt eine Klasse, die auf nicht verwalteter Seite eine Struktur mit geschachtelten Strukturen darstellt. Die Struktur wird auf verwalteter Seite in einer großen Struktur zusammengefasst. |
WinAPIs\CS\FindFile.cs WinAPIs\VB\FindFile.vb |
Struktur mit geschachtelten Strukturen (nicht flach) |
Übergibt eine Struktur mit einer eingebetteten Struktur. |
Custom\CS\Structs.cs Custom\VB\Structs.vb |
Struktur mit einem Zeiger auf eine andere Struktur |
Übergibt eine Struktur, die einen Zeiger auf eine andere Struktur enthält, als Member. |
Custom\CS\Structs.cs Custom\VB\Structs.vb |
Array von Strukturen, die nur ByVal-Ganzzahlen enthalten |
Übergibt ein Array von Strukturen, die nur Ganzzahlen enthalten, als In/Out-Parameter. |
Custom\CS\Arrays.cs Custom\VB\Arrays.vb |
Array von Strukturen, die ByRef-Ganzzahlen und ByRef-Zeichenfolgen enthalten |
Übergibt ein Array von Strukturen, die Ganzzahlen und Zeichenfolgen enthalten, als Out-Parameter. Der Aufgerufene ordnet dem Array Speicher zu. |
Custom\CS\OutArrayOfStructs.cs Custom\VB\OutArrayOfStructs.vb |
Unions mit Werttypen |
Übergibt eine Union mit Werttypen (integer und double). |
Custom\CS\Unions.cs Custom\VB\Unions.vb |
Unions mit gemischten Typen |
Übergibt Unions mit gemischten Typen (integer und string). |
Custom\CS\Unions.cs Custom\VB\Unions.vb |
So werden Arrays gemarshallt
Array |
Beschreibung |
Beispiel |
---|---|---|
Array von ByVal-Ganzzahlen |
Übergibt ein Array von Ganzzahlen als In/Out-Parameter. |
Custom\CS\Arrays.cs Custom\VB\Arrays.vb |
Array von ByRef-Ganzzahlen |
Übergibt ein Array von Ganzzahlen als In/Out-Parameter. Die Größe des Arrays kann geändert werden. |
Custom\CS\Arrays.cs Custom\VB\Arrays.vb |
2D-Array von ByVal-Ganzzahlen |
Übergibt eine Matrix von Ganzzahlen als In/Out-Parameter. |
Custom\CS\Arrays.cs Custom\VB\Arrays.vb |
Sonstige
Elementtyp |
Beschreibung |
Beispiel |
---|---|---|
HandleRef |
Zeigt einen Fall, bei dem HandleRef verwendet werden muss, um Garbage Collection zu verhindern. |
WinAPIs\CS\HandleRef.cs WinAPIs\VB\HandleRef.vb |
Funktionszeiger |
Übergibt einen Delegaten an eine nicht verwaltete Funktion, die einen Funktionszeiger erwartet. |
Custom\CS\Callback.cs Custom\VB\Callback.vb |
void* |
Ruft eine Funktion auf, die den Parameter void* besitzt. |
Custom\CS\Void.cs Custom\VB\Void.vb |
LPARAM |
Verwendet GCHandle, um ein verwaltetes Objekt an eine nicht verwaltete Funktion zu übergeben, die LPARAM erwartet. |
WinAPIs\CS\GCHandle.cs WinAPIs\VB\GCHandle.vb |
Singlethread-Apartment (STA)/Multithread-Apartment (MTA) |
Ändert die Standardeinstellungen für Apartments, wenn eine nicht verwaltete Funktion CoInitialize aufruft. |
WinAPIs\CS\ActiveDir.cs WinAPIs\VB\ActiveDir.vb |
Weitere Informationen zu Plattformaufrufen finden Sie in den Kommentaren der Quellcodedateien.
Siehe auch
Konzepte
Verwenden nicht verwalteter DLL-Funktionen
Beispiele für Plattformaufrufe