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 не является делегатом или универсальным.
Комментарии
Вы можете использовать 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 параметр не является делегатом или является открытым универсальным типом.
Параметр ptr имеет значение null.
Комментарии
Вы можете использовать GetDelegateForFunctionPointer<TDelegate>(IntPtr) методы и GetFunctionPointerForDelegate<TDelegate>(TDelegate) методы для маршалирования делегатов в обоих направлениях.
ptr преобразуется в делегат, который вызывает неуправляемый метод с помощью соглашения о вызове платформы по умолчанию. Вы можете задать соглашение о вызовах, применяя его к делегату UnmanagedFunctionPointerAttribute .
Метод GetDelegateForFunctionPointer<TDelegate>(IntPtr) имеет следующие ограничения:
- Универсальные шаблоны не поддерживаются в сценариях взаимодействия.
- Этот метод можно использовать только для чистых неуправляемых указателей функций.
- Этот метод нельзя использовать с указателями функций, полученными через C++.