Verwenden von explizitem PInvoke in C++ (DllImport-Attribut)
.NET Framework verfügt über explizite PInvoke-Features (Platform Invoke) mit dem Dllimport
-Attribut, um das Aufrufen von in DLLs verpackten, nicht verwalteten Funktionen durch verwaltete Funktionen zu ermöglichen. Explizites PInvoke ist in Situationen erforderlich, in denen nicht verwaltete APIs als DLLs verpackt sind und der Quellcode nicht verfügbar ist. Beispielsweise ist PInvoke beim Aufrufen von Win32-Funktionen erforderlich. Verwenden Sie andernfalls implizites P{Invoke; weitere Informationen finden Sie unter Verwenden der C++-Interoperabilität (impliziter PInvoke).
PInvoke funktioniert auf Grundlage des DllImportAttribute. Dieses Attribut, das den Namen der DLL als erstes Argument behandelt, wird vor die Funktionsdeklaration jedes verwendeten DLL-Einstiegspunkts gesetzt. Die Signatur der Funktion muss dem Namen einer von der DLL exportierten Funktion entsprechen (ein gewisses Maß an Typkonvertierung kann jedoch implizit durch das Definieren der DllImport
-Deklarationen als verwaltete Typen erfolgen).
So ergibt sich ein verwalteter Einstiegspunkt für jede systemeigene DLL-Funktion, die den erforderlichen Übergangscode (oder Thunk) und einfache Datenkonvertierungen enthält. Aus verwalteten Funktionen kann dann über diese Einstiegspunkte ein Aufruf in die DLL erfolgen. Der in ein Modul eingefügte Code als Ergebnis von PInvoke wird vollständig verwaltet.