Método Marshal.GetDelegateForFunctionPointer (IntPtr, Type)
Publicado: octubre de 2016
Convierte un puntero a función no administrada en un delegado.
Espacio de nombres: System.Runtime.InteropServices
Ensamblado: mscorlib (en mscorlib.dll)
Sintaxis
[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
Parámetros
ptr
Type: System.IntPtrPuntero a función no administrada que se va a convertir.
t
Type: System.TypeTipo del delegado que se va a devolver.
Valor devuelto
Type: System.Delegate
Instancia de delegado que se puede convertir al tipo de delegado adecuado.
Excepciones
Exception | Condition |
---|---|
ArgumentException | El t parámetro no es un delegado o es genérico. |
ArgumentNullException | El parámetro ptr es null. O bien El parámetro t es null. |
Comentarios
En las versiones 1.0 y 1.1 de .NET Framework, era posible pasar un delegado que representa un método administrado a código no administrado como un puntero a función, lo que el código no administrado llamar al método administrado mediante el puntero de función. También era posible que el código no administrado pasar ese puntero de función a código administrado y el puntero se resolvía correctamente en el método administrado subyacente.
.NET Framework 2.0 y versiones posteriores, puede usar el GetDelegateForFunctionPointer y GetFunctionPointerForDelegate métodos para calcular las referencias de delegados en ambas direcciones. Con GetDelegateForFunctionPointer, ptr se importa como un System.IntPtr. Un System.IntPtr se puede obtener de un delegado administrado llamando a GetFunctionPointerForDelegate y se pasa como parámetro; a continuación, se puede llamar desde el método no administrado. Tenga en cuenta que el contador de referencias de parámetros también puede calcular las referencias de los punteros de función a los delegados de .NET Framework 2.0 y versiones posteriores.
El GetDelegateForFunctionPointer método tiene las siguientes restricciones:
No se admiten genéricos en escenarios de interoperabilidad.
No se puede pasar un puntero de función no válido a este método.
Puede utilizar este método sólo para los punteros de función no administrada puros.
No puede utilizar este método con punteros a función obtenidos a través de C++ o desde el GetFunctionPointer método.
No puede utilizar este método para crear a un delegado de un puntero de función a otro delegado administrado.
Seguridad
requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.
Información de versión
Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 2.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1
Ver también
GetDelegateForFunctionPointer Sobrecarga
Clase Marshal
Espacio de nombres System.Runtime.InteropServices
Volver al principio