Marshal.GetDelegateForFunctionPointer-Methode: (IntPtr, Type)
Veröffentlicht: Oktober 2016
Konvertiert einen nicht verwalteten Funktionszeiger in einen Delegaten.
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)
Syntax
[SecurityCriticalAttribute]
public static Delegate GetDelegateForFunctionPointer(
IntPtr ptr,
Type t
)
public:
[SecurityCriticalAttribute]
static Delegate^ GetDelegateForFunctionPointer(
IntPtr ptr,
Type^ t
)
[<SecurityCriticalAttribute>]
static member GetDelegateForFunctionPointer :
ptr:nativeint *
t:Type -> Delegate
<SecurityCriticalAttribute>
Public Shared Function GetDelegateForFunctionPointer (
ptr As IntPtr,
t As Type
) As Delegate
Parameter
ptr
Type: System.IntPtrDer nicht verwaltete Funktionszeiger, der konvertiert werden soll.
t
Type: System.TypeDer Typ des zurückzugebenden Delegaten.
Rückgabewert
Type: System.Delegate
Eine Delegatinstanz, die in den entsprechenden Delegattyp umgewandelt werden kann.
Ausnahmen
Exception | Condition |
---|---|
ArgumentException | Die t Parameter ist kein Delegat oder generisch ist. |
ArgumentNullException | Der ptr-Parameter ist null. - oder - Der t-Parameter ist null. |
Hinweise
In Version 1.0 und 1.1 von .NET Framework war es möglich, einen Delegaten, die eine verwaltete Methode darstellt, von nicht verwaltetem Code als Funktionszeiger, wobei der nicht verwaltete Code die verwaltete Methode über den Funktionszeiger aufrufen zu übergeben. Es war außerdem möglich, für den nicht verwalteten Code, Funktionszeiger zurück an den verwalteten Code übergeben, und der Zeiger an die zugrunde liegende verwaltete Methode ordnungsgemäß behandelt wurde.
In der .NET Framework 2.0 oder höher, können Sie die GetDelegateForFunctionPointer und GetFunctionPointerForDelegate Methoden zum Marshallen von Delegaten in beide Richtungen. Mit GetDelegateForFunctionPointer, ptr importiert eine System.IntPtr. Ein System.IntPtr für einen verwalteten Delegaten abgerufen werden kann, durch Aufrufen von GetFunctionPointerForDelegate und als ein Parameter übergeben, es kann dann von aufgerufen werden, der nicht verwalteten Methode. Beachten Sie, dass der Parametermarshaller auch Funktionszeiger auf Delegaten in der .NET Framework 2.0 und höheren Versionen zu marshallen.
Die GetDelegateForFunctionPointer Methode hat die folgenden Einschränkungen:
Generika werden nicht in Interop-Szenarios unterstützt.
Einen ungültiger Funktionszeiger kann nicht an diese Methode übergeben werden.
Sie können diese Methode nur für reine nicht verwaltete Funktionszeiger verwenden.
Mithilfe dieser Methode kann nicht mit Funktionszeigern verwendet über C++ oder die GetFunctionPointer Methode.
Diese Methode können Sie um einen Delegaten aus einem Funktionszeiger auf einen anderen verwalteten Delegaten zu erstellen.
Sicherheit
requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.
Versionsinformationen
Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 2.0
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 8.0
Windows Phone
Verfügbar seit 8.1
Siehe auch
GetDelegateForFunctionPointer Überladen
Marshal-Klasse
System.Runtime.InteropServices-Namespace
Zurück zum Anfang