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.IntPtrO ponteiro de função não gerenciada a ser convertido.
t
Type: System.TypeO 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
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