IntPtr Estrutura
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Representa um inteiro com sinal onde a largura de bits é igual à de um ponteiro.
public value class IntPtr
public value class IntPtr : IComparable<IntPtr>, IEquatable<IntPtr>, IParsable<IntPtr>, ISpanParsable<IntPtr>, IUtf8SpanParsable<IntPtr>, System::Numerics::IAdditionOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::IAdditiveIdentity<IntPtr, IntPtr>, System::Numerics::IBinaryInteger<IntPtr>, System::Numerics::IBinaryNumber<IntPtr>, System::Numerics::IBitwiseOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::IComparisonOperators<IntPtr, IntPtr, bool>, System::Numerics::IDecrementOperators<IntPtr>, System::Numerics::IDivisionOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::IEqualityOperators<IntPtr, IntPtr, bool>, System::Numerics::IIncrementOperators<IntPtr>, System::Numerics::IMinMaxValue<IntPtr>, System::Numerics::IModulusOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::IMultiplicativeIdentity<IntPtr, IntPtr>, System::Numerics::IMultiplyOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::INumber<IntPtr>, System::Numerics::INumberBase<IntPtr>, System::Numerics::IShiftOperators<IntPtr, int, IntPtr>, System::Numerics::ISignedNumber<IntPtr>, System::Numerics::ISubtractionOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::IUnaryNegationOperators<IntPtr, IntPtr>, System::Numerics::IUnaryPlusOperators<IntPtr, IntPtr>, System::Runtime::Serialization::ISerializable
public value class IntPtr : IComparable, IComparable<IntPtr>, IEquatable<IntPtr>, IFormattable, System::Runtime::Serialization::ISerializable
public value class IntPtr : IComparable, IComparable<IntPtr>, IEquatable<IntPtr>, ISpanFormattable, System::Runtime::Serialization::ISerializable
public value class IntPtr : IComparable<IntPtr>, IEquatable<IntPtr>, IParsable<IntPtr>, ISpanParsable<IntPtr>, System::Numerics::IAdditionOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::IAdditiveIdentity<IntPtr, IntPtr>, System::Numerics::IBinaryInteger<IntPtr>, System::Numerics::IBinaryNumber<IntPtr>, System::Numerics::IBitwiseOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::IComparisonOperators<IntPtr, IntPtr, bool>, System::Numerics::IDecrementOperators<IntPtr>, System::Numerics::IDivisionOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::IEqualityOperators<IntPtr, IntPtr, bool>, System::Numerics::IIncrementOperators<IntPtr>, System::Numerics::IMinMaxValue<IntPtr>, System::Numerics::IModulusOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::IMultiplicativeIdentity<IntPtr, IntPtr>, System::Numerics::IMultiplyOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::INumber<IntPtr>, System::Numerics::INumberBase<IntPtr>, System::Numerics::IShiftOperators<IntPtr, int, IntPtr>, System::Numerics::ISignedNumber<IntPtr>, System::Numerics::ISubtractionOperators<IntPtr, IntPtr, IntPtr>, System::Numerics::IUnaryNegationOperators<IntPtr, IntPtr>, System::Numerics::IUnaryPlusOperators<IntPtr, IntPtr>, System::Runtime::Serialization::ISerializable
public value class IntPtr : IEquatable<IntPtr>, System::Runtime::Serialization::ISerializable
public value class IntPtr : System::Runtime::Serialization::ISerializable
public struct IntPtr
public readonly struct IntPtr : IComparable<IntPtr>, IEquatable<IntPtr>, IParsable<IntPtr>, ISpanParsable<IntPtr>, IUtf8SpanParsable<IntPtr>, System.Numerics.IAdditionOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.IAdditiveIdentity<IntPtr,IntPtr>, System.Numerics.IBinaryInteger<IntPtr>, System.Numerics.IBinaryNumber<IntPtr>, System.Numerics.IBitwiseOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.IComparisonOperators<IntPtr,IntPtr,bool>, System.Numerics.IDecrementOperators<IntPtr>, System.Numerics.IDivisionOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.IEqualityOperators<IntPtr,IntPtr,bool>, System.Numerics.IIncrementOperators<IntPtr>, System.Numerics.IMinMaxValue<IntPtr>, System.Numerics.IModulusOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.IMultiplicativeIdentity<IntPtr,IntPtr>, System.Numerics.IMultiplyOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.INumber<IntPtr>, System.Numerics.INumberBase<IntPtr>, System.Numerics.IShiftOperators<IntPtr,int,IntPtr>, System.Numerics.ISignedNumber<IntPtr>, System.Numerics.ISubtractionOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.IUnaryNegationOperators<IntPtr,IntPtr>, System.Numerics.IUnaryPlusOperators<IntPtr,IntPtr>, System.Runtime.Serialization.ISerializable
public readonly struct IntPtr : IComparable, IComparable<IntPtr>, IEquatable<IntPtr>, IFormattable, System.Runtime.Serialization.ISerializable
public readonly struct IntPtr : IComparable, IComparable<IntPtr>, IEquatable<IntPtr>, ISpanFormattable, System.Runtime.Serialization.ISerializable
public readonly struct IntPtr : IComparable<IntPtr>, IEquatable<IntPtr>, IParsable<IntPtr>, ISpanParsable<IntPtr>, System.Numerics.IAdditionOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.IAdditiveIdentity<IntPtr,IntPtr>, System.Numerics.IBinaryInteger<IntPtr>, System.Numerics.IBinaryNumber<IntPtr>, System.Numerics.IBitwiseOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.IComparisonOperators<IntPtr,IntPtr,bool>, System.Numerics.IDecrementOperators<IntPtr>, System.Numerics.IDivisionOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.IEqualityOperators<IntPtr,IntPtr,bool>, System.Numerics.IIncrementOperators<IntPtr>, System.Numerics.IMinMaxValue<IntPtr>, System.Numerics.IModulusOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.IMultiplicativeIdentity<IntPtr,IntPtr>, System.Numerics.IMultiplyOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.INumber<IntPtr>, System.Numerics.INumberBase<IntPtr>, System.Numerics.IShiftOperators<IntPtr,int,IntPtr>, System.Numerics.ISignedNumber<IntPtr>, System.Numerics.ISubtractionOperators<IntPtr,IntPtr,IntPtr>, System.Numerics.IUnaryNegationOperators<IntPtr,IntPtr>, System.Numerics.IUnaryPlusOperators<IntPtr,IntPtr>, System.Runtime.Serialization.ISerializable
public struct IntPtr : IEquatable<IntPtr>, System.Runtime.Serialization.ISerializable
public readonly struct IntPtr : IEquatable<IntPtr>, System.Runtime.Serialization.ISerializable
[System.Serializable]
public struct IntPtr : System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct IntPtr : System.Runtime.Serialization.ISerializable
public struct IntPtr : System.Runtime.Serialization.ISerializable
type nativeint = struct
type nativeint = struct
interface IFormattable
interface IParsable<nativeint>
interface ISpanFormattable
interface ISpanParsable<nativeint>
interface IUtf8SpanFormattable
interface IUtf8SpanParsable<nativeint>
interface IAdditionOperators<nativeint, nativeint, nativeint>
interface IAdditiveIdentity<nativeint, nativeint>
interface IBinaryInteger<nativeint>
interface IBinaryNumber<nativeint>
interface IBitwiseOperators<nativeint, nativeint, nativeint>
interface IComparisonOperators<nativeint, nativeint, bool>
interface IEqualityOperators<nativeint, nativeint, bool>
interface IDecrementOperators<nativeint>
interface IDivisionOperators<nativeint, nativeint, nativeint>
interface IIncrementOperators<nativeint>
interface IModulusOperators<nativeint, nativeint, nativeint>
interface IMultiplicativeIdentity<nativeint, nativeint>
interface IMultiplyOperators<nativeint, nativeint, nativeint>
interface INumber<nativeint>
interface INumberBase<nativeint>
interface ISubtractionOperators<nativeint, nativeint, nativeint>
interface IUnaryNegationOperators<nativeint, nativeint>
interface IUnaryPlusOperators<nativeint, nativeint>
interface IShiftOperators<nativeint, int, nativeint>
interface IMinMaxValue<nativeint>
interface ISignedNumber<nativeint>
interface ISerializable
type nativeint = struct
interface IFormattable
interface ISerializable
type nativeint = struct
interface ISpanFormattable
interface IFormattable
interface ISerializable
type nativeint = struct
interface IFormattable
interface IParsable<nativeint>
interface ISpanFormattable
interface ISpanParsable<nativeint>
interface IAdditionOperators<nativeint, nativeint, nativeint>
interface IAdditiveIdentity<nativeint, nativeint>
interface IBinaryInteger<nativeint>
interface IBinaryNumber<nativeint>
interface IBitwiseOperators<nativeint, nativeint, nativeint>
interface IComparisonOperators<nativeint, nativeint, bool>
interface IEqualityOperators<nativeint, nativeint, bool>
interface IDecrementOperators<nativeint>
interface IDivisionOperators<nativeint, nativeint, nativeint>
interface IIncrementOperators<nativeint>
interface IModulusOperators<nativeint, nativeint, nativeint>
interface IMultiplicativeIdentity<nativeint, nativeint>
interface IMultiplyOperators<nativeint, nativeint, nativeint>
interface INumber<nativeint>
interface INumberBase<nativeint>
interface ISubtractionOperators<nativeint, nativeint, nativeint>
interface IUnaryNegationOperators<nativeint, nativeint>
interface IUnaryPlusOperators<nativeint, nativeint>
interface IShiftOperators<nativeint, int, nativeint>
interface IMinMaxValue<nativeint>
interface ISignedNumber<nativeint>
interface ISerializable
type nativeint = struct
interface IFormattable
interface IParsable<nativeint>
interface ISpanFormattable
interface ISpanParsable<nativeint>
interface IAdditionOperators<nativeint, nativeint, nativeint>
interface IAdditiveIdentity<nativeint, nativeint>
interface IBinaryInteger<nativeint>
interface IBinaryNumber<nativeint>
interface IBitwiseOperators<nativeint, nativeint, nativeint>
interface IComparisonOperators<nativeint, nativeint, bool>
interface IEqualityOperators<nativeint, nativeint, bool>
interface IDecrementOperators<nativeint>
interface IDivisionOperators<nativeint, nativeint, nativeint>
interface IIncrementOperators<nativeint>
interface IModulusOperators<nativeint, nativeint, nativeint>
interface IMultiplicativeIdentity<nativeint, nativeint>
interface IMultiplyOperators<nativeint, nativeint, nativeint>
interface INumber<nativeint>
interface INumberBase<nativeint>
interface ISubtractionOperators<nativeint, nativeint, nativeint>
interface IUnaryNegationOperators<nativeint, nativeint>
interface IUnaryPlusOperators<nativeint, nativeint>
interface IUtf8SpanFormattable
interface IUtf8SpanParsable<nativeint>
interface IShiftOperators<nativeint, int, nativeint>
interface IMinMaxValue<nativeint>
interface ISignedNumber<nativeint>
interface ISerializable
type nativeint = struct
interface ISerializable
[<System.Serializable>]
type nativeint = struct
interface ISerializable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type nativeint = struct
interface ISerializable
Public Structure IntPtr
Public Structure IntPtr
Implements IAdditionOperators(Of IntPtr, IntPtr, IntPtr), IAdditiveIdentity(Of IntPtr, IntPtr), IBinaryInteger(Of IntPtr), IBinaryNumber(Of IntPtr), IBitwiseOperators(Of IntPtr, IntPtr, IntPtr), IComparable(Of IntPtr), IComparisonOperators(Of IntPtr, IntPtr, Boolean), IDecrementOperators(Of IntPtr), IDivisionOperators(Of IntPtr, IntPtr, IntPtr), IEqualityOperators(Of IntPtr, IntPtr, Boolean), IEquatable(Of IntPtr), IIncrementOperators(Of IntPtr), IMinMaxValue(Of IntPtr), IModulusOperators(Of IntPtr, IntPtr, IntPtr), IMultiplicativeIdentity(Of IntPtr, IntPtr), IMultiplyOperators(Of IntPtr, IntPtr, IntPtr), INumber(Of IntPtr), INumberBase(Of IntPtr), IParsable(Of IntPtr), ISerializable, IShiftOperators(Of IntPtr, Integer, IntPtr), ISignedNumber(Of IntPtr), ISpanParsable(Of IntPtr), ISubtractionOperators(Of IntPtr, IntPtr, IntPtr), IUnaryNegationOperators(Of IntPtr, IntPtr), IUnaryPlusOperators(Of IntPtr, IntPtr), IUtf8SpanParsable(Of IntPtr)
Public Structure IntPtr
Implements IComparable, IComparable(Of IntPtr), IEquatable(Of IntPtr), IFormattable, ISerializable
Public Structure IntPtr
Implements IComparable, IComparable(Of IntPtr), IEquatable(Of IntPtr), ISerializable, ISpanFormattable
Public Structure IntPtr
Implements IAdditionOperators(Of IntPtr, IntPtr, IntPtr), IAdditiveIdentity(Of IntPtr, IntPtr), IBinaryInteger(Of IntPtr), IBinaryNumber(Of IntPtr), IBitwiseOperators(Of IntPtr, IntPtr, IntPtr), IComparable(Of IntPtr), IComparisonOperators(Of IntPtr, IntPtr, Boolean), IDecrementOperators(Of IntPtr), IDivisionOperators(Of IntPtr, IntPtr, IntPtr), IEqualityOperators(Of IntPtr, IntPtr, Boolean), IEquatable(Of IntPtr), IIncrementOperators(Of IntPtr), IMinMaxValue(Of IntPtr), IModulusOperators(Of IntPtr, IntPtr, IntPtr), IMultiplicativeIdentity(Of IntPtr, IntPtr), IMultiplyOperators(Of IntPtr, IntPtr, IntPtr), INumber(Of IntPtr), INumberBase(Of IntPtr), IParsable(Of IntPtr), ISerializable, IShiftOperators(Of IntPtr, Integer, IntPtr), ISignedNumber(Of IntPtr), ISpanParsable(Of IntPtr), ISubtractionOperators(Of IntPtr, IntPtr, IntPtr), IUnaryNegationOperators(Of IntPtr, IntPtr), IUnaryPlusOperators(Of IntPtr, IntPtr)
Public Structure IntPtr
Implements IEquatable(Of IntPtr), ISerializable
Public Structure IntPtr
Implements ISerializable
- Herança
- Atributos
- Implementações
-
IComparable IComparable<IntPtr> IComparable<TSelf> IEquatable<IntPtr> IEquatable<TSelf> IFormattable IParsable<IntPtr> IParsable<TSelf> ISpanFormattable ISpanParsable<IntPtr> ISpanParsable<TSelf> IUtf8SpanFormattable IUtf8SpanParsable<IntPtr> IUtf8SpanParsable<TSelf> IAdditionOperators<IntPtr,IntPtr,IntPtr> IAdditionOperators<TSelf,TSelf,TSelf> IAdditiveIdentity<IntPtr,IntPtr> IAdditiveIdentity<TSelf,TSelf> IBinaryInteger<IntPtr> IBinaryNumber<IntPtr> IBinaryNumber<TSelf> IBitwiseOperators<IntPtr,IntPtr,IntPtr> IBitwiseOperators<TSelf,TSelf,TSelf> IComparisonOperators<IntPtr,IntPtr,Boolean> IComparisonOperators<TSelf,TSelf,Boolean> IDecrementOperators<IntPtr> IDecrementOperators<TSelf> IDivisionOperators<IntPtr,IntPtr,IntPtr> IDivisionOperators<TSelf,TSelf,TSelf> IEqualityOperators<IntPtr,IntPtr,Boolean> IEqualityOperators<TSelf,TOther,TResult> IEqualityOperators<TSelf,TSelf,Boolean> IIncrementOperators<IntPtr> IIncrementOperators<TSelf> IMinMaxValue<IntPtr> IModulusOperators<IntPtr,IntPtr,IntPtr> IModulusOperators<TSelf,TSelf,TSelf> IMultiplicativeIdentity<IntPtr,IntPtr> IMultiplicativeIdentity<TSelf,TSelf> IMultiplyOperators<IntPtr,IntPtr,IntPtr> IMultiplyOperators<TSelf,TSelf,TSelf> INumber<IntPtr> INumber<TSelf> INumberBase<IntPtr> INumberBase<TSelf> IShiftOperators<IntPtr,Int32,IntPtr> IShiftOperators<TSelf,Int32,TSelf> ISignedNumber<IntPtr> ISubtractionOperators<IntPtr,IntPtr,IntPtr> ISubtractionOperators<TSelf,TSelf,TSelf> IUnaryNegationOperators<IntPtr,IntPtr> IUnaryNegationOperators<TSelf,TSelf> IUnaryPlusOperators<IntPtr,IntPtr> IUnaryPlusOperators<TSelf,TSelf> ISerializable
Exemplos
O exemplo seguinte utiliza ponteiros geridos para inverter os caracteres num array. Depois de inicializar um String objeto e obter o seu comprimento, faz o seguinte:
Chama o Marshal.StringToHGlobalAnsi método para copiar a cadeia Unicode para memória não gerida como um carácter ANSI (de um byte). O método devolve um IntPtr objeto que aponta para o início da cadeia não gerida. O exemplo do Visual Basic usa este ponteiro diretamente; nos exemplos de C++, F# e C#, ele é convertido num ponteiro para um byte.
Chama o Marshal.AllocHGlobal método para alocar o mesmo número de bytes que ocupa a cadeia não gerida. O método devolve um IntPtr objeto que aponta para o início do bloco de memória não gerido. O exemplo do Visual Basic usa este ponteiro diretamente; nos exemplos de C++, F# e C#, ele é convertido num ponteiro para um byte.
O exemplo Visual Basic define uma variável chamada
offsetque é igual ao comprimento da cadeia ANSI. É usado para determinar o deslocamento para a memória não gerida para onde o próximo carácter da cadeia ANSI é copiado. Como o seu valor inicial é o comprimento da cadeia, a operação de cópia irá copiar um carácter do início da cadeia até ao fim do bloco de memória.Os exemplos de C#, F# e C++ chamam o ToPointer método para obter um ponteiro não gerido para o endereço inicial da cadeia e para o bloco de memória não gerido, e adicionam um a menos do que o comprimento da cadeia ao endereço inicial da cadeia ANSI. Como o apontador de string não gerido agora aponta para o fim da string, a operação de cópia irá copiar um carácter do final da string para o início do bloco de memória.
Utiliza um loop para copiar cada carácter da string para o bloco de memória não gerido.
O exemplo Visual Basic chama o método Marshal.ReadByte(IntPtr, Int32) para ler o byte (ou carácter de um byte) a um deslocamento especificado do ponteiro gerido para a string ANSI. O deslocamento é incrementado a cada iteração do ciclo. Depois, chama o Marshal.WriteByte(IntPtr, Int32, Byte) método para escrever o byte no endereço de memória definido pelo endereço inicial do bloco de memória não gerido mais
offset. Depois, diminuioffset.Os exemplos de C#, F# e C++ realizam a operação de cópia, depois decrementam o ponteiro para o endereço da próxima localização na cadeia ANSI não gerida e incrementam o ponteiro para o próximo endereço no bloco não gerido.
Todos os exemplos chamam o Marshal.PtrToStringAnsi para converter o bloco de memória não gerida que contém a string ANSI copiada para um objeto Unicode String gerido.
Após exibir as cadeias original e invertida, todos os exemplos chamam o FreeHGlobal método para libertar a memória alocada para a cadeia ANSI não gerida e o bloco de memória não gerida.
using namespace System;
using namespace System::Runtime::InteropServices;
class NotTooSafeStringReverse
{
public:
static void Main()
{
String^ stringA = "I seem to be turned around!";
int copylen = stringA->Length;
// Allocate HGlobal memory for source and destination strings
IntPtr sptr = Marshal::StringToHGlobalAnsi(stringA);
IntPtr dptr = Marshal::AllocHGlobal(copylen + 1);
char *src = (char *)sptr.ToPointer();
char *dst = (char *)dptr.ToPointer();
if (copylen > 0)
{
// set the source pointer to the end of the string
// to do a reverse copy.
src += copylen - 1;
while (copylen-- > 0)
{
*dst++ = *src--;
}
*dst = 0;
}
String^ stringB = Marshal::PtrToStringAnsi(dptr);
Console::WriteLine("Original:\n{0}\n", stringA);
Console::WriteLine("Reversed:\n{0}", stringB);
// Free HGlobal memory
Marshal::FreeHGlobal(dptr);
Marshal::FreeHGlobal(sptr);
}
};
int main()
{
NotTooSafeStringReverse::Main();
}
// The progam has the following output:
//
// Original:
// I seem to be turned around!
//
// Reversed:
// !dnuora denrut eb ot mees I
using System;
using System.Runtime.InteropServices;
class NotTooSafeStringReverse
{
static public void Main()
{
string stringA = "I seem to be turned around!";
int copylen = stringA.Length;
// Allocate HGlobal memory for source and destination strings
IntPtr sptr = Marshal.StringToHGlobalAnsi(stringA);
IntPtr dptr = Marshal.AllocHGlobal(copylen + 1);
// The unsafe section where byte pointers are used.
unsafe
{
byte *src = (byte *)sptr.ToPointer();
byte *dst = (byte *)dptr.ToPointer();
if (copylen > 0)
{
// set the source pointer to the end of the string
// to do a reverse copy.
src += copylen - 1;
while (copylen-- > 0)
{
*dst++ = *src--;
}
*dst = 0;
}
}
string stringB = Marshal.PtrToStringAnsi(dptr);
Console.WriteLine("Original:\n{0}\n", stringA);
Console.WriteLine("Reversed:\n{0}", stringB);
// Free HGlobal memory
Marshal.FreeHGlobal(dptr);
Marshal.FreeHGlobal(sptr);
}
}
// The progam has the following output:
//
// Original:
// I seem to be turned around!
//
// Reversed:
// !dnuora denrut eb ot mees I
#nowarn "9"
open System.Runtime.InteropServices
open FSharp.NativeInterop
[<EntryPoint>]
let main _ =
let stringA = "I seem to be turned around!"
let mutable copylen = stringA.Length
// Allocate HGlobal memory for source and destination strings
let sptr = Marshal.StringToHGlobalAnsi stringA
let dptr = Marshal.AllocHGlobal(copylen + 1)
let mutable src: byte nativeptr = sptr.ToPointer() |> NativePtr.ofVoidPtr
let mutable dst: byte nativeptr = dptr.ToPointer() |> NativePtr.ofVoidPtr
if copylen > 0 then
// set the source pointer to the end of the string
// to do a reverse copy.
src <-
NativePtr.toNativeInt src + nativeint (copylen - 1)
|> NativePtr.ofNativeInt
while copylen > 0 do
copylen <- copylen - 1
NativePtr.read src |> NativePtr.write dst
dst <- NativePtr.toNativeInt dst + 1n |> NativePtr.ofNativeInt
src <- NativePtr.toNativeInt src - 1n |> NativePtr.ofNativeInt
NativePtr.write dst 0uy
let stringB = Marshal.PtrToStringAnsi dptr
printfn $"Original:\n{stringA}\n"
printfn $"Reversed:\n{stringB}"
// Free HGlobal memory
Marshal.FreeHGlobal dptr
Marshal.FreeHGlobal sptr
0
// The progam has the following output:
//
// Original:
// I seem to be turned around!
//
// Reversed:
// !dnuora denrut eb ot mees I
Imports System.Runtime.InteropServices
Public Module Example
Public Sub Main()
Dim stringA As String = "I seem to be turned around!"
Dim copylen As Integer = stringA.Length
' Allocate HGlobal memory for source and destination strings
Dim sptr As IntPtr = Marshal.StringToHGlobalAnsi(stringA)
Dim dptr As IntPtr = Marshal.AllocHGlobal(copylen)
Dim offset As Integer = copylen - 1
For ctr As Integer = 0 To copylen - 1
Dim b As Byte = Marshal.ReadByte(sptr, ctr)
Marshal.WriteByte(dptr, offset, b)
offset -= 1
Next
Dim stringB As String = Marshal.PtrToStringAnsi(dptr)
Console.WriteLine("Original:{1}{0}{1}", stringA, vbCrLf)
Console.WriteLine("Reversed:{1}{0}{1}", stringB, vbCrLf)
' Free HGlobal memory
Marshal.FreeHGlobal(dptr)
Marshal.FreeHGlobal(sptr)
End Sub
End Module
' The example displays the following output:
' Original:
' I seem to be turned around!
'
' Reversed:
' !dnuora denrut eb ot mees I
Observações
O IntPtr tipo é concebido para ser um inteiro cujo tamanho é igual ao de um ponteiro. Ou seja, espera-se que uma instância deste tipo tenha 32 bits num processo de 32 bits e 64 bits num processo de 64 bits.
O IntPtr tipo pode ser usado por linguagens que suportam ponteiros e como um meio comum de referenciar dados entre línguas que suportam e não suportam ponteiros.
IntPtr Objetos também podem ser usados para segurar pegas. Por exemplo, instâncias de IntPtr são amplamente usadas na System.IO.FileStream classe para armazenar handles de ficheiros.
Note
Usar IntPtr como ponteiro ou alavanca é propenso a erros e inseguro. É simplesmente um tipo inteiro que pode ser usado como formato de intercâmbio para ponteiros e handles, devido ao mesmo tamanho. Fora de requisitos específicos de intercâmbio, como para passar dados para uma linguagem que não suporta ponteiros, um ponteiro corretamente tipado deve ser usado para representar ponteiros e SafeHandle deve ser usado para representar handles.
Este tipo implementa o ISerializable. Nas versões .NET 5 e posteriores, este tipo também implementa as interfaces IFormattable. Nas versões .NET 7 e posteriores, este tipo também implementa as interfaces IBinaryInteger<TSelf>, IMinMaxValue<TSelf> e ISignedNumber<TSelf>.
Em C# a partir da versão 9.0, pode usar o tipo incorporado nint para definir inteiros de tamanho nativo. Este tipo é representado internamente pelo IntPtr tipo e fornece operações e conversões apropriadas para tipos inteiros. Para mais informações, consulte tipos nint e nuint.
Em C# a partir da versão 11 e ao direcionar o runtime .NET 7 ou posterior, nint é um alias para IntPtr da mesma forma que int é um alias para Int32.
Construtores
| Name | Description |
|---|---|
| IntPtr(Int32) |
Inicializa uma nova instância de IntPtr usando o inteiro assinado especificado de 32 bits. |
| IntPtr(Int64) |
Inicializa uma nova instância de IntPtr usando o inteiro assinado especificado de 64 bits. |
| IntPtr(Void*) |
Inicializa uma nova instância de IntPtr usar o ponteiro especificado para um tipo não especificado. |
Campos
| Name | Description |
|---|---|
| Zero |
Um campo de apenas leitura que representa um inteiro com sinal inicializado a zero. |
Propriedades
| Name | Description |
|---|---|
| MaxValue |
Obtém o maior valor possível de IntPtr. |
| MinValue |
Obtém o menor valor possível de IntPtr. |
| Size |
Percebe o tamanho desta instância. |
Métodos
| Name | Description |
|---|---|
| Abs(IntPtr) |
Calcula o absoluto de um valor. |
| Add(IntPtr, Int32) |
Adiciona um deslocamento a um inteiro assinado. |
| BigMul(IntPtr, IntPtr, IntPtr) |
Produz o produto completo de dois inteiros nativos sem sinal. |
| Clamp(IntPtr, IntPtr, IntPtr) |
Fixa um valor a um valor mínimo e máximo inclusivo. |
| CompareTo(IntPtr) |
Compara a instância atual com outro objeto do mesmo tipo e devolve um inteiro que indica se a instância atual precede, segue ou ocorre na mesma posição na ordem de ordenação que o outro objeto. |
| CompareTo(Object) |
Compara a instância atual com outro objeto do mesmo tipo e devolve um inteiro que indica se a instância atual precede, segue ou ocorre na mesma posição na ordem de ordenação que o outro objeto. |
| CopySign(IntPtr, IntPtr) |
Copia o sinal de um valor para o sinal de outro valor. |
| CreateChecked<TOther>(TOther) |
Cria uma instância do tipo atual a partir de um valor, lançando uma exceção de overflow para quaisquer valores que estejam fora do intervalo representável do tipo atual. |
| CreateSaturating<TOther>(TOther) |
Cria uma instância do tipo atual a partir de um valor, saturando quaisquer valores que estejam fora do intervalo representável do tipo atual. |
| CreateTruncating<TOther>(TOther) |
Cria uma instância do tipo atual a partir de um valor, truncando quaisquer valores que estejam fora do intervalo representável do tipo atual. |
| DivRem(IntPtr, IntPtr) |
Calcula o quociente e o resto de dois valores. |
| Equals(IntPtr) |
Indica se o objeto atual é igual a outro objeto do mesmo tipo. |
| Equals(Object) |
Devolve um valor que indica se esta instância é igual a um objeto especificado. |
| GetHashCode() |
Devolve o código de hash para esta instância. |
| IsEvenInteger(IntPtr) |
Determina se um valor representa um número inteiro par. |
| IsNegative(IntPtr) |
Determina se um valor é negativo. |
| IsOddInteger(IntPtr) |
Determina se um valor representa um número inteiro ímpar. |
| IsPositive(IntPtr) |
Determina se um valor é positivo. |
| IsPow2(IntPtr) |
Determina se um valor é uma potência de dois. |
| LeadingZeroCount(IntPtr) |
Calcula o número de zeros à esquerda num valor. |
| Log10(IntPtr) |
Representa um inteiro com sinal onde a largura de bits é igual à de um ponteiro. |
| Log2(IntPtr) |
Calcula o log2 de um valor. |
| Max(IntPtr, IntPtr) |
Compara dois valores para calcular qual é maior. |
| MaxMagnitude(IntPtr, IntPtr) |
Compara dois valores para calcular qual é maior. |
| Min(IntPtr, IntPtr) |
Compara dois valores para calcular qual é menor. |
| MinMagnitude(IntPtr, IntPtr) |
Compara dois valores para calcular qual é menor. |
| Parse(ReadOnlySpan<Byte>, IFormatProvider) |
Analisa um intervalo de caracteres UTF-8 num valor. |
| Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider) |
Analisa um intervalo de caracteres UTF-8 num valor. |
| Parse(ReadOnlySpan<Char>, IFormatProvider) |
Divide um intervalo de caracteres num valor. |
| Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider) |
Converte a representação de caracteres de um número num estilo especificado e formato específico de cultura para o seu equivalente inteiro nativo com sinal. |
| Parse(String, IFormatProvider) |
Converte a representação da cadeia de um número num formato específico de cultura para o seu equivalente inteiro nativo com sinal. |
| Parse(String, NumberStyles, IFormatProvider) |
Converte a representação da cadeia de um número num estilo especificado e formato específico de cultura para o seu equivalente inteiro nativo com sinal. |
| Parse(String, NumberStyles) |
Converte a representação da cadeia de um número num estilo especificado para o seu equivalente inteiro nativo com sinal. |
| Parse(String) |
Converte a representação da cadeia de um número para o seu equivalente inteiro nativo com sinal. |
| PopCount(IntPtr) |
Calcula o número de bits que estão definidos num valor. |
| RotateLeft(IntPtr, Int32) |
Roda um valor deixado por uma determinada quantia. |
| RotateRight(IntPtr, Int32) |
Roda um valor exatamente por uma determinada quantia. |
| Sign(IntPtr) |
Calcula o sinal de um valor. |
| Subtract(IntPtr, Int32) |
Subtrai um deslocamento de um inteiro assinado. |
| ToInt32() |
Converte o valor desta instância para um inteiro assinado de 32 bits. |
| ToInt64() |
Converte o valor desta instância para um inteiro assinado de 64 bits. |
| ToPointer() |
Converte o valor desta instância num ponteiro para um tipo não especificado. |
| ToString() |
Converte o valor numérico do objeto atual IntPtr para a sua representação equivalente em cadeias. |
| ToString(IFormatProvider) |
Converte o valor numérico desta instância para a sua representação equivalente de cadeias usando o formato especificado e a informação específica de formato da cultura. |
| ToString(String, IFormatProvider) |
Formata o valor da instância atual usando o formato especificado. |
| ToString(String) |
Converte o valor numérico do objeto atual IntPtr para a sua representação equivalente em cadeias. |
| TrailingZeroCount(IntPtr) |
Calcula o número de zeros finais num valor. |
| TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Tenta formatar o valor da instância atual como UTF-8 no intervalo fornecido de bytes. |
| TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Tenta formatar o valor da instância atual no intervalo fornecido de caracteres. |
| TryParse(ReadOnlySpan<Byte>, IFormatProvider, IntPtr) |
Tenta separar um intervalo de caracteres UTF-8 num valor. |
| TryParse(ReadOnlySpan<Byte>, IntPtr) |
Tenta converter um intervalo de caracteres UTF-8 contendo a representação de cadeias de um número para o seu equivalente inteiro assinado. |
| TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, IntPtr) |
Tenta separar um intervalo de caracteres UTF-8 num valor. |
| TryParse(ReadOnlySpan<Char>, IFormatProvider, IntPtr) |
Tenta analisar uma cadeia num valor. |
| TryParse(ReadOnlySpan<Char>, IntPtr) |
Converte a representação de caracteres de apenas leitura de um número para o seu equivalente inteiro nativo com sinal. Um valor de retorno indica se a conversão foi bem-sucedida. |
| TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, IntPtr) |
Converte a representação de caracteres de um número num estilo especificado e formato específico de cultura para o seu equivalente inteiro nativo com sinal. Um valor de retorno indica se a conversão foi bem-sucedida. |
| TryParse(String, IFormatProvider, IntPtr) |
Tenta analisar uma cadeia num valor. |
| TryParse(String, IntPtr) |
Converte a representação da cadeia de um número para o seu equivalente inteiro nativo com sinal. Um valor de retorno indica se a conversão foi bem-sucedida. |
| TryParse(String, NumberStyles, IFormatProvider, IntPtr) |
Converte a representação da cadeia de um número num estilo especificado e formato específico de cultura para o seu equivalente inteiro nativo com sinal. Um valor de retorno indica se a conversão foi bem-sucedida. |
Operadores
| Name | Description |
|---|---|
| Addition(IntPtr, Int32) |
Adiciona um deslocamento a um inteiro assinado. |
| Equality(IntPtr, IntPtr) |
Determina se duas instâncias especificadas de IntPtr são iguais. |
| Explicit(Int32 to IntPtr) |
Converte o valor de um inteiro com sinal de 32 bits para um IntPtr. |
| Explicit(Int64 to IntPtr) |
Converte o valor de um inteiro com sinal de 64 bits para um IntPtr. |
| Explicit(IntPtr to Int32) |
Converte o valor do especificado IntPtr para um inteiro assinado de 32 bits. |
| Explicit(IntPtr to Int64) |
Converte o valor do especificado IntPtr para um inteiro assinado de 64 bits. |
| Explicit(IntPtr to Void*) |
Converte o valor do especificado IntPtr para um ponteiro para um tipo não especificado. Esta API não está em conformidade com CLS. |
| Explicit(Void* to IntPtr) |
Converte o ponteiro especificado para um tipo não especificado para um IntPtr. Esta API não está em conformidade com CLS. |
| Inequality(IntPtr, IntPtr) |
Determina se duas instâncias especificadas de IntPtr não são iguais. |
| Subtraction(IntPtr, Int32) |
Subtrai um deslocamento de um inteiro assinado. |
Implementações de Interface Explícita
| Name | Description |
|---|---|
| IAdditionOperators<IntPtr,IntPtr,IntPtr>.Addition(IntPtr, IntPtr) |
Soma dois valores para calcular a sua soma. |
| IAdditionOperators<IntPtr,IntPtr,IntPtr>.CheckedAddition(IntPtr, IntPtr) |
Soma dois valores para calcular a sua soma. |
| IAdditiveIdentity<IntPtr,IntPtr>.AdditiveIdentity |
Obtém a identidade aditiva do tipo atual. |
| IBinaryInteger<IntPtr>.GetByteCount() |
Obtém o número de bytes que serão escritos como parte de TryWriteLittleEndian(Span<Byte>, Int32). |
| IBinaryInteger<IntPtr>.GetShortestBitLength() |
Obtém o comprimento, em bits, da representação do complemento dos dois mais curtos do valor atual. |
| IBinaryInteger<IntPtr>.TryReadBigEndian(ReadOnlySpan<Byte>, Boolean, IntPtr) |
Representa um inteiro com sinal onde a largura de bits é igual à de um ponteiro. |
| IBinaryInteger<IntPtr>.TryReadLittleEndian(ReadOnlySpan<Byte>, Boolean, IntPtr) |
Representa um inteiro com sinal onde a largura de bits é igual à de um ponteiro. |
| IBinaryInteger<IntPtr>.TryWriteBigEndian(Span<Byte>, Int32) |
Tenta escrever o valor atual, em formato big-endian, para um determinado intervalo. |
| IBinaryInteger<IntPtr>.TryWriteLittleEndian(Span<Byte>, Int32) |
Tenta escrever o valor atual, em formato little-endian, num determinado intervalo. |
| IBinaryNumber<IntPtr>.AllBitsSet |
Obtém uma instância do tipo binário em que todos os bits estão definidos. |
| IBitwiseOperators<IntPtr,IntPtr,IntPtr>.BitwiseAnd(IntPtr, IntPtr) |
Calcula o bit a bit de dois valores. |
| IBitwiseOperators<IntPtr,IntPtr,IntPtr>.BitwiseOr(IntPtr, IntPtr) |
Calcula o bit-or-ou de dois valores. |
| IBitwiseOperators<IntPtr,IntPtr,IntPtr>.ExclusiveOr(IntPtr, IntPtr) |
Calcula o ou exclusivo de dois valores. |
| IBitwiseOperators<IntPtr,IntPtr,IntPtr>.OnesComplement(IntPtr) |
Calcula a representação de um complemento de um dado valor. |
| IComparisonOperators<IntPtr,IntPtr,Boolean>.GreaterThan(IntPtr, IntPtr) |
Compara dois valores para determinar qual é maior. |
| IComparisonOperators<IntPtr,IntPtr,Boolean>.GreaterThanOrEqual(IntPtr, IntPtr) |
Compara dois valores para determinar qual é maior ou igual. |
| IComparisonOperators<IntPtr,IntPtr,Boolean>.LessThan(IntPtr, IntPtr) |
Compara dois valores para determinar qual é menor. |
| IComparisonOperators<IntPtr,IntPtr,Boolean>.LessThanOrEqual(IntPtr, IntPtr) |
Compara dois valores para determinar qual é menor ou igual. |
| IDecrementOperators<IntPtr>.CheckedDecrement(IntPtr) |
Diminui um valor. |
| IDecrementOperators<IntPtr>.Decrement(IntPtr) |
Diminui um valor. |
| IDivisionOperators<IntPtr,IntPtr,IntPtr>.Division(IntPtr, IntPtr) |
Divide um valor por outro para calcular o seu quociente. |
| IEquatable<IntPtr>.Equals(IntPtr) |
Devolve um valor que indica se esta instância é igual a outro inteiro com sinal. |
| IIncrementOperators<IntPtr>.CheckedIncrement(IntPtr) |
Incrementa um valor. |
| IIncrementOperators<IntPtr>.Increment(IntPtr) |
Incrementa um valor. |
| IMinMaxValue<IntPtr>.MaxValue |
Obtém o valor máximo do tipo atual. |
| IMinMaxValue<IntPtr>.MinValue |
Obtém o valor mínimo do tipo atual. |
| IModulusOperators<IntPtr,IntPtr,IntPtr>.Modulus(IntPtr, IntPtr) |
Divide dois valores para calcular o seu módulo ou resto. |
| IMultiplicativeIdentity<IntPtr,IntPtr>.MultiplicativeIdentity |
Obtém a identidade multiplicativa do tipo atual. |
| IMultiplyOperators<IntPtr,IntPtr,IntPtr>.CheckedMultiply(IntPtr, IntPtr) |
Multiplica dois valores juntos para calcular o seu produto. |
| IMultiplyOperators<IntPtr,IntPtr,IntPtr>.Multiply(IntPtr, IntPtr) |
Multiplica dois valores juntos para calcular o seu produto. |
| INumber<IntPtr>.MaxNumber(IntPtr, IntPtr) |
Compara dois valores para calcular qual é maior e devolve o outro valor se uma entrada for |
| INumber<IntPtr>.MinNumber(IntPtr, IntPtr) |
Compara dois valores para calcular qual é menor e devolve o outro valor se uma entrada for |
| INumberBase<IntPtr>.IsCanonical(IntPtr) |
Determina se um valor está na sua representação canónica. |
| INumberBase<IntPtr>.IsComplexNumber(IntPtr) |
Determina se um valor representa um número complexo. |
| INumberBase<IntPtr>.IsFinite(IntPtr) |
Determina se um valor é finito. |
| INumberBase<IntPtr>.IsImaginaryNumber(IntPtr) |
Determina se um valor representa um número puramente imaginário. |
| INumberBase<IntPtr>.IsInfinity(IntPtr) |
Determina se um valor é infinito. |
| INumberBase<IntPtr>.IsInteger(IntPtr) |
Determina se um valor representa um número inteiro. |
| INumberBase<IntPtr>.IsNaN(IntPtr) |
Determina se um valor é NaN. |
| INumberBase<IntPtr>.IsNegativeInfinity(IntPtr) |
Determina se um valor é menos infinito. |
| INumberBase<IntPtr>.IsNormal(IntPtr) |
Determina se um valor é normal. |
| INumberBase<IntPtr>.IsPositiveInfinity(IntPtr) |
Determina se um valor é infinito positivo. |
| INumberBase<IntPtr>.IsRealNumber(IntPtr) |
Determina se um valor representa um número real. |
| INumberBase<IntPtr>.IsSubnormal(IntPtr) |
Determina se um valor é subnormal. |
| INumberBase<IntPtr>.IsZero(IntPtr) |
Determina se um valor é zero. |
| INumberBase<IntPtr>.MaxMagnitudeNumber(IntPtr, IntPtr) |
Compara dois valores para calcular qual tem maior magnitude e devolve o outro valor se uma entrada for |
| INumberBase<IntPtr>.MinMagnitudeNumber(IntPtr, IntPtr) |
Compara dois valores para calcular que tem a magnitude menor e devolve o outro valor se uma entrada for |
| INumberBase<IntPtr>.MultiplyAddEstimate(IntPtr, IntPtr, IntPtr) |
Calcula uma estimativa de ( |
| INumberBase<IntPtr>.One |
Obtém o valor |
| INumberBase<IntPtr>.Radix |
Obtém a raiz, ou base, para o tipo. |
| INumberBase<IntPtr>.TryConvertFromChecked<TOther>(TOther, IntPtr) |
Representa um inteiro com sinal onde a largura de bits é igual à de um ponteiro. |
| INumberBase<IntPtr>.TryConvertFromSaturating<TOther>(TOther, IntPtr) |
Representa um inteiro com sinal onde a largura de bits é igual à de um ponteiro. |
| INumberBase<IntPtr>.TryConvertFromTruncating<TOther>(TOther, IntPtr) |
Representa um inteiro com sinal onde a largura de bits é igual à de um ponteiro. |
| INumberBase<IntPtr>.TryConvertToChecked<TOther>(IntPtr, TOther) |
Tenta converter uma instância do tipo atual para outro tipo, lançando uma exceção de overflow para quaisquer valores que estejam fora do intervalo representável do tipo atual. |
| INumberBase<IntPtr>.TryConvertToSaturating<TOther>(IntPtr, TOther) |
Tenta converter uma instância do tipo atual para outro tipo, saturando quaisquer valores que estejam fora do intervalo representável do tipo atual. |
| INumberBase<IntPtr>.TryConvertToTruncating<TOther>(IntPtr, TOther) |
Tenta converter uma instância do tipo atual para outro tipo, truncando quaisquer valores que estejam fora do intervalo representável do tipo atual. |
| INumberBase<IntPtr>.Zero |
Obtém o valor |
| ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Preenche um SerializationInfo objeto com os dados necessários para serializar o objeto atual IntPtr . |
| IShiftOperators<IntPtr,Int32,IntPtr>.LeftShift(IntPtr, Int32) |
Desloca um valor deixado por uma determinada quantia. |
| IShiftOperators<IntPtr,Int32,IntPtr>.RightShift(IntPtr, Int32) |
Desloca um valor para a direita numa determinada quantia. |
| IShiftOperators<IntPtr,Int32,IntPtr>.UnsignedRightShift(IntPtr, Int32) |
Desloca um valor para a direita numa determinada quantia. |
| ISignedNumber<IntPtr>.NegativeOne |
Obtém o valor |
| ISubtractionOperators<IntPtr,IntPtr,IntPtr>.CheckedSubtraction(IntPtr, IntPtr) |
Subtrai dois valores para calcular a sua diferença. |
| ISubtractionOperators<IntPtr,IntPtr,IntPtr>.Subtraction(IntPtr, IntPtr) |
Subtrai dois valores para calcular a sua diferença. |
| IUnaryNegationOperators<IntPtr,IntPtr>.CheckedUnaryNegation(IntPtr) |
Calcula a negação unária verificada de um valor. |
| IUnaryNegationOperators<IntPtr,IntPtr>.UnaryNegation(IntPtr) |
Calcula a negação unária de um valor. |
| IUnaryPlusOperators<IntPtr,IntPtr>.UnaryPlus(IntPtr) |
Calcula o plus unário de um valor. |
Aplica-se a
Segurança de Thread
Este tipo é seguro para fios.