Freigeben über


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:

Download sample

So erstellen Sie die Beispiele über die Eingabeaufforderung

  1. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu einem der sprachspezifischen Unterverzeichnisse.

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

  1. Öffnen Sie Windows Explorer, und navigieren Sie zu einem der sprachspezifischen Unterverzeichnisse.

  2. Doppelklicken Sie auf das Symbol für [Dateiname].sln, um die Datei in Visual Studio zu öffnen.

  3. Wählen Sie im Menü Erstellen die Option Projektmappe erstellen aus.

So führen Sie die Beispiele aus

  1. Navigieren Sie zu einem der sprachspezifischen Verzeichnisse unter dem Verzeichnis WinAPIs oder Custom, das die erstellten ausführbaren Dateien enthält.

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

Referenz

CharSet

DllImportAttribute

LayoutKind

Marshal

MarshalAsAttribute

StructLayoutAttribute

Weitere Ressourcen

Standardmäßiges Marshallingverhalten

Marshallen von Daten mit Plattformaufruf