Freigeben über


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

    Der nicht verwaltete Funktionszeiger, der konvertiert werden soll.

  • t
    Type: System.Type

    Der 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

SecurityCriticalAttribute

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