Marshallen von Daten mit Plattformaufruf

Um aus einer nicht verwalteten Bibliothek exportierte Funktionen aufzurufen, benötigt eine .NET Framework-Anwendung einen Funktionsprototyp in nicht verwaltetem Code, der die nicht verwaltete Funktion repräsentiert. Wenn Sie einen Prototyp erstellen möchten, der es dem Plattformaufruf ermöglicht, Daten ordnungsgemäß zu marshallen, müssen Sie wie folgt vorgehen:

  • Wenden Sie das DLLImportAttribute-Attribut auf die statische Funktion oder Methode in verwaltetem Code an.

  • Ersetzten Sie nicht verwaltete Datentypen durch verwaltete Datentypen.

Sie können die mit einer nicht verwalteten Funktion gelieferte Dokumentation verwenden, um einen äquivalenten verwalteten Prototyp zu erstellen, indem Sie das Attribut mit seinen optionalen Feldern anwenden und nicht verwaltete Datentypen durch verwaltete Datentypen ersetzen. Anweisungen zum Anwenden des DllImportAttribute finden Sie unter Verwenden nicht verwalteter DLL-Funktionen.

In diesem Abschnitt finden Sie Beispiele, die demonstrieren, wie verwaltete Funktionsprototypen zum Übergeben von Argumenten an und Empfangen von Rückgabewerten von Funktionen, die aus nicht verwalteten Bibliotheken exportiert wurden, erstellt werden. Darüber hinaus demonstrieren diese Beispiele, wann das MarshalAsAttribute-Attribut und die Marshal-Klasse zu verwenden sind, um Daten explizit zu marshallen.

In diesem Abschnitt

  • Datentypen für den Plattformaufruf
    Enthält eine Liste der verwalteten Datentypen und der entsprechenden nicht verwalteten Datentypen.

  • PinvokeLib.dll
    Stellt Code bereit, mit dem die von Pinvoke.dll zur Verfügung gestellten Bibliotheksfunktionen definiert werden.

  • Marshallen von Zeichenfolgen
    Beschreibt, wie Zeichenfolgen durch einen Wert, durch einen Verweis, in Strukturen, in Klassen und in Arrays übergeben werden.

  • Marshallen von Klassen, Strukturen und Unions
    Beschreibt, wie Klassen durch einen Wert, verschiedene Strukturen und Unions mit Wert und gemischten Typen übergeben werden.

  • Marshallen von Typenarrays
    Beschreibt, wie mehrdimensionale Arrays von ganzen Zahlen durch einen Wert und eindimensionale Arrays durch einen Verweis übergeben werden.

  • Verschiedene Marshallingbeispiele
    Beschreibt die Aspekte der Garbage Collection und des Threadings, die das Verhalten von Interop-Marshalling beeinflussen.

Verwandte Abschnitte