IntPtr Structure

Définition

Représente un entier signé où la largeur du bit est identique à celle d’un pointeur.

public value class IntPtr
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 : 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 : IEquatable<IntPtr>, System::Runtime::Serialization::ISerializable
public value class IntPtr : System::Runtime::Serialization::ISerializable
public struct IntPtr
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 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 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 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 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 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 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 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 IEquatable(Of IntPtr), ISerializable
Public Structure IntPtr
Implements ISerializable
Héritage
IntPtr
Attributs
Implémente
IComparable IComparable<IntPtr> IEquatable<IntPtr> IFormattable ISerializable ISpanFormattable IComparable<TSelf> IEquatable<TSelf> IParsable<IntPtr> IParsable<TSelf> ISpanParsable<IntPtr> ISpanParsable<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> IUtf8SpanFormattable IUtf8SpanParsable<IntPtr> IUtf8SpanParsable<TSelf>

Exemples

L’exemple suivant utilise des pointeurs managés pour inverser les caractères d’un tableau. Une fois qu’il initialise un String objet et obtient sa longueur, il effectue les opérations suivantes :

  1. Appelle la Marshal.StringToHGlobalAnsi méthode pour copier la chaîne Unicode dans la mémoire non managée en tant que caractère ANSI (un octet). La méthode retourne un IntPtr objet qui pointe vers le début de la chaîne non managée. L’exemple Visual Basic utilise ce pointeur directement ; Dans les exemples C++, F# et C#, il est converti en pointeur vers un octet.

  2. Appelle la Marshal.AllocHGlobal méthode pour allouer le même nombre d’octets que la chaîne non managée occupe. La méthode retourne un IntPtr objet qui pointe vers le début du bloc de mémoire non managé. L’exemple Visual Basic utilise ce pointeur directement ; Dans les exemples C++, F# et C#, il est converti en pointeur vers un octet.

  3. L’exemple Visual Basic définit une variable nommée offset qui est égale à la longueur de la chaîne ANSI. Il est utilisé pour déterminer le décalage dans la mémoire non managée dans laquelle le caractère suivant dans la chaîne ANSI est copié. Étant donné que sa valeur de départ est la longueur de la chaîne, l’opération de copie copie un caractère du début de la chaîne jusqu’à la fin du bloc de mémoire.

    Les exemples C#, F# et C++ appellent la ToPointer méthode pour obtenir un pointeur non managé vers l’adresse de départ de la chaîne et le bloc de mémoire non managé, et ils en ajoutent un de moins que la longueur de la chaîne à l’adresse de départ de la chaîne ANSI. Étant donné que le pointeur de chaîne non managé pointe maintenant vers la fin de la chaîne, l’opération de copie copie un caractère de la fin de la chaîne vers le début du bloc de mémoire.

  4. Utilise une boucle pour copier chaque caractère de la chaîne vers le bloc de mémoire non managé.

    L’exemple Visual Basic appelle la Marshal.ReadByte(IntPtr, Int32) méthode pour lire l’octet (ou le caractère d’un octet) à un décalage spécifié du pointeur managé vers la chaîne ANSI. Le décalage est incrémenté à chaque itération de la boucle. Il appelle ensuite la Marshal.WriteByte(IntPtr, Int32, Byte) méthode pour écrire l’octet dans l’adresse mémoire définie par l’adresse de départ du bloc de mémoire non managé plus offset. Il décrémente offsetensuite .

    Les exemples C#, F# et C++ effectuent l’opération de copie, puis décrémentent le pointeur vers l’adresse de l’emplacement suivant dans la chaîne ANSI non managée et incrémentent le pointeur vers l’adresse suivante dans le bloc non managé.

  5. Tous les exemples appellent le Marshal.PtrToStringAnsi pour convertir le bloc de mémoire non managé contenant la chaîne ANSI copiée en objet Unicode String managé.

  6. Après avoir affiché les chaînes d’origine et inversées, tous les exemples appellent la FreeHGlobal méthode pour libérer la mémoire allouée à la chaîne ANSI non managée et au bloc de mémoire non managé.

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

Remarques

Le IntPtr type est conçu pour être un entier dont la taille est identique à celle d’un pointeur. Autrement dit, une instance de ce type doit être 32 bits dans un processus 32 bits et 64 bits dans un processus 64 bits.

Le IntPtr type peut être utilisé par les langages qui prennent en charge les pointeurs et comme moyen courant de référencer des données entre des langages qui prennent ou non en charge les pointeurs.

IntPtr les objets peuvent également être utilisés pour contenir des handles. Par exemple, les instances de IntPtr sont largement utilisées dans la System.IO.FileStream classe pour contenir des descripteurs de fichiers.

Notes

L’utilisation IntPtr comme pointeur ou handle est sujette aux erreurs et non sécurisée. Il s’agit simplement d’un type entier qui peut être utilisé comme format d’échange pour les pointeurs et les handles en raison de la même taille. En dehors des exigences d’échange spécifiques, telles que le passage de données à un langage qui ne prend pas en charge les pointeurs, un pointeur correctement typé doit être utilisé pour représenter les pointeurs et SafeHandle doit être utilisé pour représenter les handles.

Ce type implémente le ISerializable. Dans .NET 5 et versions ultérieures, ce type implémente également les IFormattable interfaces. Dans .NET 7 et versions ultérieures, ce type implémente également les IBinaryInteger<TSelf>interfaces , IMinMaxValue<TSelf>et ISignedNumber<TSelf> .

En C# à partir de la version 9.0, vous pouvez utiliser le type intégré nint pour définir des entiers de taille native. Ce type est représenté par le IntPtr type en interne et fournit des opérations et des conversions appropriées pour les types entiers. Pour plus d’informations, consultez types nint et nuint.

En C# à partir de la version 11 et lors du ciblage du runtime .NET 7 ou ultérieur, nint est un alias pour IntPtr de la même manière que int pour Int32.

Constructeurs

IntPtr(Int32)

Initialise une nouvelle instance de à l’aide de IntPtr l’entier signé 32 bits spécifié.

IntPtr(Int64)

Initialise une nouvelle instance de à l’aide de IntPtr l’entier signé 64 bits spécifié.

IntPtr(Void*)

Initialise une nouvelle instance de IntPtr à l'aide du pointeur spécifié vers un type non spécifié.

Champs

Zero

Champ en lecture seule qui représente un entier signé qui a été initialisé à zéro.

Propriétés

MaxValue

Obtient la plus grande valeur possible de IntPtr.

MinValue

Obtient la plus petite valeur possible de IntPtr.

Size

Obtient la taille de cette instance.

Méthodes

Abs(IntPtr)

Calcule l’absolu d’une valeur.

Add(IntPtr, Int32)

Ajoute un décalage à un entier signé.

Clamp(IntPtr, IntPtr, IntPtr)

Limite une valeur à une valeur minimale et maximale inclusive.

CompareTo(IntPtr)

Compare l'instance actuelle à un autre objet du même type et retourne un entier qui indique si l'instance actuelle précède ou suit un autre objet ou se trouve à la même position que ce dernier dans l'ordre de tri.

CompareTo(Object)

Compare l'instance actuelle à un autre objet du même type et retourne un entier qui indique si l'instance actuelle précède ou suit un autre objet ou se trouve à la même position que ce dernier dans l'ordre de tri.

CopySign(IntPtr, IntPtr)

Copie le signe d’une valeur dans le signe d’une autre valeur.

CreateChecked<TOther>(TOther)

Crée une instance du type actuel à partir d’une valeur, lève une exception de dépassement de capacité pour toutes les valeurs qui se trouvent en dehors de la plage représentable du type actuel.

CreateSaturating<TOther>(TOther)

Crée une instance du type actuel à partir d’une valeur, saturant toutes les valeurs qui se trouvent en dehors de la plage représentable du type actuel.

CreateTruncating<TOther>(TOther)

Crée une instance du type actuel à partir d’une valeur, en tronqué toutes les valeurs qui se trouvent en dehors de la plage représentable du type actuel.

DivRem(IntPtr, IntPtr)

Calcule le quotient et le reste de deux valeurs.

Equals(IntPtr)

Indique si l'objet actuel est égal à un autre objet du même type.

Equals(Object)

Retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

GetHashCode()

Retourne le code de hachage de cette instance.

IsEvenInteger(IntPtr)

Détermine si une valeur représente un nombre entier pair.

IsNegative(IntPtr)

Détermine si une valeur est négative.

IsOddInteger(IntPtr)

Détermine si une valeur représente un nombre entier impair.

IsPositive(IntPtr)

Détermine si une valeur est positive.

IsPow2(IntPtr)

Détermine si une valeur est une puissance de deux.

LeadingZeroCount(IntPtr)

Calcule le nombre de zéros non significatifs dans une valeur.

Log2(IntPtr)

Calcule le log2 d’une valeur.

Max(IntPtr, IntPtr)

Compare deux valeurs au calcul, ce qui est supérieur.

MaxMagnitude(IntPtr, IntPtr)

Compare deux valeurs au calcul, ce qui est supérieur.

Min(IntPtr, IntPtr)

Compare deux valeurs au calcul, ce qui est inférieur.

MinMagnitude(IntPtr, IntPtr)

Compare deux valeurs au calcul, ce qui est inférieur.

Parse(ReadOnlySpan<Byte>, IFormatProvider)

Analyse une étendue de caractères UTF-8 dans une valeur.

Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider)

Analyse une étendue de caractères UTF-8 dans une valeur.

Parse(ReadOnlySpan<Char>, IFormatProvider)

Analyse une étendue de caractères dans une valeur.

Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)

Convertit l’étendue en lecture seule de la représentation en caractères d’un nombre dans un style et un format spécifique à la culture spécifiés en entier natif signé équivalent.

Parse(String)

Convertit la représentation sous forme de chaîne d’un nombre en entier natif signé équivalent.

Parse(String, IFormatProvider)

Convertit la représentation sous forme de chaîne d’un nombre dans un format spécifique à la culture spécifié en entier natif signé équivalent.

Parse(String, NumberStyles)

Convertit la représentation sous forme de chaîne d’un nombre dans un style spécifié en entier natif signé équivalent.

Parse(String, NumberStyles, IFormatProvider)

Convertit la représentation sous forme de chaîne d’un nombre dans un style spécifié et un format spécifique à la culture en son équivalent entier natif signé.

PopCount(IntPtr)

Calcule le nombre de bits définis dans une valeur.

RotateLeft(IntPtr, Int32)

Fait pivoter une valeur à gauche d’une quantité donnée.

RotateRight(IntPtr, Int32)

Fait pivoter une valeur d’un montant donné.

Sign(IntPtr)

Calcule le signe d’une valeur.

Subtract(IntPtr, Int32)

Soustrait un décalage d’un entier signé.

ToInt32()

Convertit la valeur de cette instance en entier 32 bits signé.

ToInt64()

Convertit la valeur de cette instance en entier 64 bits signé.

ToPointer()

Convertit la valeur de cette instance en pointeur vers un type non spécifié.

ToString()

Convertit la valeur numérique de l'objet IntPtr actuel dans sa représentation sous forme chaîne équivalente.

ToString(IFormatProvider)

Convertit la valeur numérique de cette instance en sa représentation sous forme de chaîne équivalente à l'aide du format spécifié et des informations de format spécifiques à la culture.

ToString(String)

Convertit la valeur numérique de l'objet IntPtr actuel dans sa représentation sous forme chaîne équivalente.

ToString(String, IFormatProvider)

Met en forme la valeur de l’instance actuelle en utilisant le format spécifié.

TrailingZeroCount(IntPtr)

Calcule le nombre de zéros de fin dans une valeur.

TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Tente de mettre en forme la valeur de la instance actuelle en UTF-8 dans l’étendue d’octets fournie.

TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Tente de mettre en forme la valeur de la instance actuelle dans l’étendue de caractères fournie.

TryParse(ReadOnlySpan<Byte>, IFormatProvider, IntPtr)

Tente d’analyser une étendue de caractères UTF-8 dans une valeur.

TryParse(ReadOnlySpan<Byte>, IntPtr)

Tente de convertir une étendue de caractères UTF-8 contenant la représentation sous forme de chaîne d’un nombre en son équivalent entier signé.

TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, IntPtr)

Tente d’analyser une étendue de caractères UTF-8 dans une valeur.

TryParse(ReadOnlySpan<Char>, IFormatProvider, IntPtr)

Tente d’analyser une chaîne dans une valeur.

TryParse(ReadOnlySpan<Char>, IntPtr)

Convertit l’étendue en lecture seule de la représentation en caractères d’un nombre en entier natif signé équivalent. Une valeur de retour indique si la conversion a réussi.

TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, IntPtr)

Convertit l’étendue en lecture seule de la représentation en caractères d’un nombre dans un style et un format spécifique à la culture spécifiés en entier natif signé équivalent. Une valeur de retour indique si la conversion a réussi.

TryParse(String, IFormatProvider, IntPtr)

Tente d’analyser une chaîne dans une valeur.

TryParse(String, IntPtr)

Convertit la représentation sous forme de chaîne d’un nombre en entier natif signé équivalent. Une valeur de retour indique si la conversion a réussi.

TryParse(String, NumberStyles, IFormatProvider, IntPtr)

Convertit la représentation sous forme de chaîne d’un nombre dans un style spécifié et un format spécifique à la culture en son équivalent entier natif signé. Une valeur de retour indique si la conversion a réussi.

Opérateurs

Addition(IntPtr, Int32)

Ajoute un décalage à un entier signé.

Equality(IntPtr, IntPtr)

Détermine si deux instances spécifiées de IntPtr sont égales.

Explicit(Int32 to IntPtr)

Convertit la valeur d'un entier 32 bits signé en IntPtr.

Explicit(Int64 to IntPtr)

Convertit la valeur d'un entier 64 bits signé en IntPtr.

Explicit(IntPtr to Int32)

Convertit la valeur du IntPtr spécifié en entier 32 bits signé.

Explicit(IntPtr to Int64)

Convertit la valeur du IntPtr spécifié en entier 64 bits signé.

Explicit(IntPtr to Void*)

Convertit la valeur du IntPtr spécifié en pointeur de type non spécifié.

Cette API n'est pas conforme CLS.

Explicit(Void* to IntPtr)

Convertit le pointeur spécifié vers un type non spécifié en IntPtr.

Cette API n'est pas conforme CLS.

Inequality(IntPtr, IntPtr)

Détermine si deux instances spécifiées de IntPtr ne sont pas égales.

Subtraction(IntPtr, Int32)

Soustrait un décalage d’un entier signé.

Implémentations d’interfaces explicites

IAdditionOperators<IntPtr,IntPtr,IntPtr>.Addition(IntPtr, IntPtr)

Ajoute deux valeurs ensemble pour calculer leur somme.

IAdditionOperators<IntPtr,IntPtr,IntPtr>.CheckedAddition(IntPtr, IntPtr)

Ajoute deux valeurs ensemble pour calculer leur somme.

IAdditiveIdentity<IntPtr,IntPtr>.AdditiveIdentity

Obtient l’identité additive du type actuel.

IBinaryInteger<IntPtr>.GetByteCount()

Obtient le nombre d’octets qui seront écrits dans le cadre de TryWriteLittleEndian(Span<Byte>, Int32).

IBinaryInteger<IntPtr>.GetShortestBitLength()

Obtient la longueur, en bits, de la représentation complémentaire des deux plus courtes de la valeur actuelle.

IBinaryInteger<IntPtr>.TryReadBigEndian(ReadOnlySpan<Byte>, Boolean, IntPtr)

Représente un entier signé où la largeur du bit est identique à celle d’un pointeur.

IBinaryInteger<IntPtr>.TryReadLittleEndian(ReadOnlySpan<Byte>, Boolean, IntPtr)

Représente un entier signé où la largeur du bit est identique à celle d’un pointeur.

IBinaryInteger<IntPtr>.TryWriteBigEndian(Span<Byte>, Int32)

Tente d’écrire la valeur actuelle, au format big-endian, dans une étendue donnée.

IBinaryInteger<IntPtr>.TryWriteLittleEndian(Span<Byte>, Int32)

Tente d’écrire la valeur actuelle, au format little-endian, dans une étendue donnée.

IBinaryNumber<IntPtr>.AllBitsSet

Obtient une instance du type binaire dans lequel tous les bits sont définis.

IBitwiseOperators<IntPtr,IntPtr,IntPtr>.BitwiseAnd(IntPtr, IntPtr)

Calcule les valeurs au niveau du bit et de deux valeurs.

IBitwiseOperators<IntPtr,IntPtr,IntPtr>.BitwiseOr(IntPtr, IntPtr)

Calcule au niveau du bit ou de deux valeurs.

IBitwiseOperators<IntPtr,IntPtr,IntPtr>.ExclusiveOr(IntPtr, IntPtr)

Calcule les valeurs exclusives ou de deux valeurs.

IBitwiseOperators<IntPtr,IntPtr,IntPtr>.OnesComplement(IntPtr)

Calcule la représentation du complément des uns d’une valeur donnée.

IComparisonOperators<IntPtr,IntPtr,Boolean>.GreaterThan(IntPtr, IntPtr)

Compare deux valeurs pour déterminer la valeur la plus élevée.

IComparisonOperators<IntPtr,IntPtr,Boolean>.GreaterThanOrEqual(IntPtr, IntPtr)

Compare deux valeurs pour déterminer laquelle est supérieure ou égale.

IComparisonOperators<IntPtr,IntPtr,Boolean>.LessThan(IntPtr, IntPtr)

Compare deux valeurs pour déterminer laquelle est inférieure.

IComparisonOperators<IntPtr,IntPtr,Boolean>.LessThanOrEqual(IntPtr, IntPtr)

Compare deux valeurs pour déterminer laquelle est inférieure ou égale.

IDecrementOperators<IntPtr>.CheckedDecrement(IntPtr)

Décrémente une valeur.

IDecrementOperators<IntPtr>.Decrement(IntPtr)

Décrémente une valeur.

IDivisionOperators<IntPtr,IntPtr,IntPtr>.Division(IntPtr, IntPtr)

Divise une valeur par une autre pour calculer leur quotient.

IEquatable<IntPtr>.Equals(IntPtr)

Retourne une valeur qui indique si cette instance est égale à un autre entier signé.

IIncrementOperators<IntPtr>.CheckedIncrement(IntPtr)

Incrémente une valeur.

IIncrementOperators<IntPtr>.Increment(IntPtr)

Incrémente une valeur.

IMinMaxValue<IntPtr>.MaxValue

Obtient la valeur maximale du type actuel.

IMinMaxValue<IntPtr>.MinValue

Obtient la valeur minimale du type actuel.

IModulusOperators<IntPtr,IntPtr,IntPtr>.Modulus(IntPtr, IntPtr)

Divise deux valeurs ensemble pour calculer leur module ou leur reste.

IMultiplicativeIdentity<IntPtr,IntPtr>.MultiplicativeIdentity

Obtient l’identité multiplicative du type actuel.

IMultiplyOperators<IntPtr,IntPtr,IntPtr>.CheckedMultiply(IntPtr, IntPtr)

Multiplie deux valeurs ensemble pour calculer leur produit.

IMultiplyOperators<IntPtr,IntPtr,IntPtr>.Multiply(IntPtr, IntPtr)

Multiplie deux valeurs ensemble pour calculer leur produit.

INumber<IntPtr>.MaxNumber(IntPtr, IntPtr)

Compare deux valeurs au calcul, ce qui est supérieur et retourne l’autre valeur si une entrée est NaN.

INumber<IntPtr>.MinNumber(IntPtr, IntPtr)

Compare deux valeurs au calcul, ce qui est inférieur et retourne l’autre valeur si une entrée est NaN.

INumberBase<IntPtr>.IsCanonical(IntPtr)

Détermine si une valeur se trouve dans sa représentation canonique.

INumberBase<IntPtr>.IsComplexNumber(IntPtr)

Détermine si une valeur représente un nombre complexe.

INumberBase<IntPtr>.IsFinite(IntPtr)

Détermine si une valeur est finie.

INumberBase<IntPtr>.IsImaginaryNumber(IntPtr)

Détermine si une valeur représente un nombre imaginaire pur.

INumberBase<IntPtr>.IsInfinity(IntPtr)

Détermine si une valeur est infinie.

INumberBase<IntPtr>.IsInteger(IntPtr)

Détermine si une valeur représente un nombre intégral.

INumberBase<IntPtr>.IsNaN(IntPtr)

Détermine si une valeur est NaN.

INumberBase<IntPtr>.IsNegativeInfinity(IntPtr)

Détermine si une valeur est négative à l’infini.

INumberBase<IntPtr>.IsNormal(IntPtr)

Détermine si une valeur est normale.

INumberBase<IntPtr>.IsPositiveInfinity(IntPtr)

Détermine si une valeur est positive à l’infini.

INumberBase<IntPtr>.IsRealNumber(IntPtr)

Détermine si une valeur représente un nombre réel.

INumberBase<IntPtr>.IsSubnormal(IntPtr)

Détermine si une valeur est sous-normale.

INumberBase<IntPtr>.IsZero(IntPtr)

Détermine si une valeur est égale à zéro.

INumberBase<IntPtr>.MaxMagnitudeNumber(IntPtr, IntPtr)

Compare deux valeurs au calcul qui a la plus grande amplitude et retourne l’autre valeur si une entrée est NaN.

INumberBase<IntPtr>.MinMagnitudeNumber(IntPtr, IntPtr)

Compare deux valeurs au calcul qui a la plus petite amplitude et retourne l’autre valeur si une entrée est NaN.

INumberBase<IntPtr>.One

Obtient la valeur 1 du type.

INumberBase<IntPtr>.Radix

Obtient la base pour le type.

INumberBase<IntPtr>.TryConvertFromChecked<TOther>(TOther, IntPtr)

Représente un entier signé où la largeur du bit est identique à celle d’un pointeur.

INumberBase<IntPtr>.TryConvertFromSaturating<TOther>(TOther, IntPtr)

Représente un entier signé où la largeur du bit est identique à celle d’un pointeur.

INumberBase<IntPtr>.TryConvertFromTruncating<TOther>(TOther, IntPtr)

Représente un entier signé où la largeur du bit est identique à celle d’un pointeur.

INumberBase<IntPtr>.TryConvertToChecked<TOther>(IntPtr, TOther)

Tente de convertir une instance du type actuel en un autre type, lève une exception de dépassement de capacité pour toutes les valeurs qui se trouvent en dehors de la plage représentable du type actuel.

INumberBase<IntPtr>.TryConvertToSaturating<TOther>(IntPtr, TOther)

Tente de convertir une instance du type actuel en un autre type, en saturant toutes les valeurs qui se trouvent en dehors de la plage représentable du type actuel.

INumberBase<IntPtr>.TryConvertToTruncating<TOther>(IntPtr, TOther)

Tente de convertir une instance du type actuel en un autre type, en tronqué toutes les valeurs qui se trouvent en dehors de la plage représentable du type actuel.

INumberBase<IntPtr>.Zero

Obtient la valeur 0 du type.

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Remplit un objet SerializationInfo des données nécessaires à la sérialisation de l'objet IntPtr actuel.

IShiftOperators<IntPtr,Int32,IntPtr>.LeftShift(IntPtr, Int32)

Déplace une valeur à gauche d’un montant donné.

IShiftOperators<IntPtr,Int32,IntPtr>.RightShift(IntPtr, Int32)

Déplace une valeur vers la droite d’un montant donné.

IShiftOperators<IntPtr,Int32,IntPtr>.UnsignedRightShift(IntPtr, Int32)

Déplace une valeur vers la droite d’un montant donné.

ISignedNumber<IntPtr>.NegativeOne

Obtient la valeur -1 du type.

ISubtractionOperators<IntPtr,IntPtr,IntPtr>.CheckedSubtraction(IntPtr, IntPtr)

Soustrait deux valeurs pour calculer leur différence.

ISubtractionOperators<IntPtr,IntPtr,IntPtr>.Subtraction(IntPtr, IntPtr)

Soustrait deux valeurs pour calculer leur différence.

IUnaryNegationOperators<IntPtr,IntPtr>.CheckedUnaryNegation(IntPtr)

Calcule la négation unaire vérifiée d’une valeur.

IUnaryNegationOperators<IntPtr,IntPtr>.UnaryNegation(IntPtr)

Calcule la négation unaire d’une valeur.

IUnaryPlusOperators<IntPtr,IntPtr>.UnaryPlus(IntPtr)

Calcule le plus unaire d’une valeur.

S’applique à

Cohérence de thread

Ce type est thread-safe.

Voir aussi