Compartilhar via


Método Marshal.GetDelegateForFunctionPointer (IntPtr, Type)

 

Dica

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Converte um ponteiro de função não gerenciada em um delegado.

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (em mscorlib.dll)

Sintaxe

[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

    O ponteiro de função não gerenciada a ser convertido.

  • t
    Type: System.Type

    O tipo do delegado a ser retornado.

Valor Retornado

Type: System.Delegate

Uma instância de delegado que pode ser convertida para o tipo de delegado apropriado.

Exceções

Exception Condition
ArgumentException

O parâmetro t não é um delegado ou é genérico.

ArgumentNullException

O parâmetro ptr é null.

-ou-

O parâmetro t é null.

Comentários

Nas versões 1.0 e 1.1 do .NET Framework, é possível passar um delegado que representa um método gerenciado para código não gerenciado como um ponteiro de função, permitindo que o código não gerenciado chamar o método gerenciado através do ponteiro de função. Também é possível que o código não gerenciado passar esse ponteiro de função para o código gerenciado e o ponteiro foi resolvido corretamente para o método gerenciado subjacente.

No .NET Framework 2.0 e versões posteriores, você pode usar o GetDelegateForFunctionPointer e GetFunctionPointerForDelegate métodos de realizar marshaling de representantes em ambas as direções. Com GetDelegateForFunctionPointer, ptr é importado como um System.IntPtr. Um System.IntPtr pode ser obtido para um delegado gerenciado chamando GetFunctionPointerForDelegate e passado como um parâmetro; em seguida, pode ser chamado de dentro do método não gerenciado. Observe que o marshaler do parâmetro também puder realizar marshaling de ponteiros de função para delegados no .NET Framework 2.0 e versões posteriores.

O GetDelegateForFunctionPointer método tem as seguintes restrições:

  • Não há suporte para genéricos em cenários de interoperabilidade.

  • Você não pode passar um ponteiro de função inválido para este método.

  • Você pode usar esse método somente para ponteiros de função não gerenciada puro.

  • Você não pode usar esse método com ponteiros de função obtidos por meio de C++ ou do GetFunctionPointer método.

  • Você não pode usar esse método para criar um delegado de um ponteiro de função para outro delegado gerenciado.

Segurança

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Informações de Versão

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 2.0
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 8.0
Windows Phone
Disponível desde 8.1

Confira Também

GetDelegateForFunctionPointer Sobrecarga
Classe Marshal
Namespace System.Runtime.InteropServices

Retornar ao início