Marshal.GetDelegateForFunctionPointer Метод

Определение

Перегрузки

Имя Описание
GetDelegateForFunctionPointer(IntPtr, Type)
Устаревшие..

Преобразует неуправляемый указатель функции на делегат.

GetDelegateForFunctionPointer<TDelegate>(IntPtr)

Преобразует неуправляемый указатель функции на делегат указанного типа.

GetDelegateForFunctionPointer(IntPtr, Type)

Исходный код:
Marshal.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.cs

Внимание

GetDelegateForFunctionPointer(IntPtr, Type) may be unavailable in future releases. Instead, use GetDelegateForFunctionPointer<T>(IntPtr). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296521

Преобразует неуправляемый указатель функции на делегат.

public:
 static Delegate ^ GetDelegateForFunctionPointer(IntPtr ptr, Type ^ t);
[System.Obsolete("GetDelegateForFunctionPointer(IntPtr, Type) may be unavailable in future releases. Instead, use GetDelegateForFunctionPointer<T>(IntPtr). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296521")]
[System.Security.SecurityCritical]
public static Delegate GetDelegateForFunctionPointer(IntPtr ptr, Type t);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Marshalling code for the delegate might not be available. Use the GetDelegateForFunctionPointer<TDelegate> overload instead.")]
public static Delegate GetDelegateForFunctionPointer(IntPtr ptr, Type t);
public static Delegate GetDelegateForFunctionPointer(IntPtr ptr, Type t);
[System.Security.SecurityCritical]
public static Delegate GetDelegateForFunctionPointer(IntPtr ptr, Type t);
[<System.Obsolete("GetDelegateForFunctionPointer(IntPtr, Type) may be unavailable in future releases. Instead, use GetDelegateForFunctionPointer<T>(IntPtr). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296521")>]
[<System.Security.SecurityCritical>]
static member GetDelegateForFunctionPointer : nativeint * Type -> Delegate
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Marshalling code for the delegate might not be available. Use the GetDelegateForFunctionPointer<TDelegate> overload instead.")>]
static member GetDelegateForFunctionPointer : nativeint * Type -> Delegate
static member GetDelegateForFunctionPointer : nativeint * Type -> Delegate
[<System.Security.SecurityCritical>]
static member GetDelegateForFunctionPointer : nativeint * Type -> Delegate
Public Shared Function GetDelegateForFunctionPointer (ptr As IntPtr, t As Type) As Delegate

Параметры

ptr
IntPtr

nativeint

Неуправляемый указатель функции, который необходимо преобразовать.

t
Type

Тип возвращаемого делегата.

Возвращаемое значение

Экземпляр делегата, который можно привести к соответствующему типу делегата.

Атрибуты

Исключения

Параметр t не является делегатом или универсальным.

Параметр ptr имеет значение null.

–или–

Параметр t имеет значение null.

Комментарии

Вы можете использовать GetDelegateForFunctionPointer методы и GetFunctionPointerForDelegate методы для маршалирования делегатов в обоих направлениях. GetDelegateForFunctionPointer При ptrэтом импортируется как .System.IntPtr System.IntPtr Можно получить для управляемого делегата путем вызова GetFunctionPointerForDelegate и передача в качестве параметра. Затем его можно вызвать из неуправляемого метода. Обратите внимание, что маршалер параметров также может маршалировать указатели функций на делегаты.

ptr преобразуется в делегат, который вызывает неуправляемый метод с помощью соглашения о вызове платформы по умолчанию. Вы можете задать соглашение о вызовах, применяя его к делегату UnmanagedFunctionPointerAttribute .

Метод GetDelegateForFunctionPointer имеет следующие ограничения:

  • Универсальные шаблоны не поддерживаются в сценариях взаимодействия.
  • Этот метод можно использовать только для чистых неуправляемых указателей функций.
  • Этот метод нельзя использовать с указателями функций, полученными через C++.

Применяется к

GetDelegateForFunctionPointer<TDelegate>(IntPtr)

Исходный код:
Marshal.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.cs
Исходный код:
Marshal.cs

Преобразует неуправляемый указатель функции на делегат указанного типа.

public:
generic <typename TDelegate>
 static TDelegate GetDelegateForFunctionPointer(IntPtr ptr);
[System.Security.SecurityCritical]
public static TDelegate GetDelegateForFunctionPointer<TDelegate>(IntPtr ptr);
public static TDelegate GetDelegateForFunctionPointer<TDelegate>(IntPtr ptr);
[<System.Security.SecurityCritical>]
static member GetDelegateForFunctionPointer : nativeint -> 'Delegate
static member GetDelegateForFunctionPointer : nativeint -> 'Delegate
Public Shared Function GetDelegateForFunctionPointer(Of TDelegate) (ptr As IntPtr) As TDelegate

Параметры типа

TDelegate

Тип возвращаемого делегата.

Параметры

ptr
IntPtr

nativeint

Указатель неуправляемой функции для преобразования.

Возвращаемое значение

TDelegate

Экземпляр указанного типа делегата.

Атрибуты

Исключения

Универсальный TDelegate параметр не является делегатом или является открытым универсальным типом.

Параметр ptr имеет значение null.

Комментарии

Вы можете использовать GetDelegateForFunctionPointer<TDelegate>(IntPtr) методы и GetFunctionPointerForDelegate<TDelegate>(TDelegate) методы для маршалирования делегатов в обоих направлениях.

ptr преобразуется в делегат, который вызывает неуправляемый метод с помощью соглашения о вызове платформы по умолчанию. Вы можете задать соглашение о вызовах, применяя его к делегату UnmanagedFunctionPointerAttribute .

Метод GetDelegateForFunctionPointer<TDelegate>(IntPtr) имеет следующие ограничения:

  • Универсальные шаблоны не поддерживаются в сценариях взаимодействия.
  • Этот метод можно использовать только для чистых неуправляемых указателей функций.
  • Этот метод нельзя использовать с указателями функций, полученными через C++.

Применяется к