Compartir a través de


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

    Puntero a función no administrada que se va a convertir.

  • t
    Type: System.Type

    Tipo 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

SecurityCriticalAttribute

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