Verwenden nicht verwalteter DLL-Funktionen

Der Plattformaufruf ist ein Dienst, der es verwaltetem Code ermöglicht, nicht verwaltete Funktionen aufzurufen, die in DLLs (Dynamic Link Library) implementiert sind, z.B. die in der Windows-API enthaltenen Funktionen. Es sucht eine exportierte Funktion, ruft diese auf und marshallt ihre Argumente (ganze Zahlen, Zeichenfolgen, Arrays, Strukturen usw.) bei Bedarf über die Grenzen des dialogfähigen Betriebs hinaus.

In diesem Abschnitt werden Aufgaben beschrieben, die nicht verwalteten DLL-Funktionen zugeordnet sind. Zudem erhalten Sie Informationen zum Thema Plattformaufruf. Zusätzlich zu den folgenden Aufgaben sind allgemeine Überlegungen und ein Link enthalten, die weitere Informationen und Beispiele bieten.

So verarbeiten Sie exportierte DLL-Funktionen

  1. Identifizieren von Funktionen in DLLs.

    Sie müssen mindestens den Namen der Funktion und den Namen der DLL angeben, in der sie enthalten ist.

  2. Erstellen einer Klasse zum Halten von DLL-Funktionen.

    Sie können eine bestehende Klasse verwenden, eine einzelne Klasse für jede nicht verwaltete Funktion erstellen oder eine Klasse erstellen, die einen Satz zusammengehöriger, nicht verwalteter Funktionen enthält.

  3. Erstellen von Prototypen in verwaltetem Code.

    [Visual Basic] Verwenden Sie die Declare-Anweisung mit den Schlüsselwörtern Function und Lib. In seltenen Fällen können Sie DllImportAttribute mit den Schlüsselwörtern Shared Function verwenden. Diese Fälle werden weiter unten in diesem Abschnitt erläutert.

    [C#] Verwenden Sie DllImportAttribute, um die DLL und die Funktion zu identifizieren. Kennzeichnen Sie die Methode mit den Modifizierern static und extern.

    [C++] Verwenden Sie DllImportAttribute, um die DLL und die Funktion zu identifizieren. Kennzeichnen Sie die Wrappermethode oder Funktion mit extern "C" .

  4. Aufrufen einer DLL-Funktion.

    Rufen Sie die Methode für Ihre verwaltete Klasse wie für jede andere verwaltete Methode auf. Übergeben von Strukturen und Implementieren von Rückruffunktionen sind spezielle Fälle.

Beispiele für die Vorgehensweise beim Erstellen von .NET-basierten Deklarationen, die mit dem Plattformaufruf verwendet werden können, finden Sie unter Marshallen von Daten mit Plattformaufruf.

Genauere Betrachtung von Plattformaufrufen

Plattformaufrufe beruhen auf Metadaten, um exportierte Funktionen zu suchen und ihre Argumente zur Laufzeit zu marshallen. Die folgende Abbildung veranschaulicht diesen Prozess.

Diagram that shows a platform invoke call.

Wenn der Plattformaufruf eine nicht verwaltete Funktion aufruft, werden die folgenden Aktionen nacheinander ausgeführt:

  1. Suchen der DLL, die die Funktion enthält.

  2. Laden der DLL in den Arbeitsspeicher.

  3. Suchen der Adresse der Funktion im Arbeitsspeicher und Übertragen ihrer Argumente auf den Stapel, wobei die Daten bei Bedarf gemarshallt werden.

    Hinweis

    Das Suchen und Laden der DLL sowie das Suchen der Adresse der Funktion im Arbeitsspeicher erfolgen nur beim ersten Aufruf der Funktion.

  4. Übertragen der Kontrolle an die nicht verwaltete Funktion.

Der Plattformaufruf löst Ausnahmen aus, die von der nicht verwalteten Funktion für den verwalteten Aufrufer generiert wurden.

Siehe auch