IntPtr Struct-datatyp

Definition

Representerar ett signerat heltal där bitbredden är samma som en pekare.

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
Arv
IntPtr
Attribut
Implementeringar
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

Exempel

I följande exempel används hanterade pekare för att omvända tecknen i en matris. När ett objekt har initierats String och dess längd har hämtats gör det följande:

  1. Marshal.StringToHGlobalAnsi Anropar metoden för att kopiera Unicode-strängen till ohanterat minne som ett ANSI-tecken (en byte). Metoden returnerar ett IntPtr objekt som pekar på början av den ohanterade strängen. I det Visual Basic exemplet används den här pekaren direkt. I exemplen C++, F# och C# skickas den till en pekare till en byte.

  2. Marshal.AllocHGlobal Anropar metoden för att allokera samma antal byte som den ohanterade strängen upptar. Metoden returnerar ett IntPtr objekt som pekar på början av det ohanterade minnesblocket. I det Visual Basic exemplet används den här pekaren direkt. I exemplen C++, F# och C# skickas den till en pekare till en byte.

  3. I Visual Basic-exemplet definieras en variabel med namnet offset som är lika med längden på ANSI-strängen. Den används för att fastställa förskjutningen till ohanterat minne som nästa tecken i ANSI-strängen kopieras till. Eftersom dess startvärde är längden på strängen kopierar kopieringsåtgärden ett tecken från början av strängen till slutet av minnesblocket.

    I exemplen ToPointer C#, F# och C++ anropas metoden för att hämta en ohanterad pekare till startadressen för strängen och det ohanterade minnesblocket, och de lägger till en mindre än längden på strängen till ansi-strängens startadress. Eftersom den ohanterade strängpekaren nu pekar mot slutet av strängen kopierar kopieringsåtgärden ett tecken från slutet av strängen till början av minnesblocket.

  4. Använder en loop för att kopiera varje tecken från strängen till det ohanterade minnesblocket.

    I Visual Basic-exemplet anropas metoden Marshal.ReadByte(IntPtr, Int32) för att läsa bytet (eller ett byte) vid en angiven förskjutning från den hanterade pekaren till ANSI-strängen. Förskjutningen ökas med varje iteration av loopen. Den anropar Marshal.WriteByte(IntPtr, Int32, Byte) sedan metoden för att skriva bytet till den minnesadress som definieras av startadressen för det ohanterade blocket med minne plus offset. Det minskar offsetsedan .

    Exemplen C#, F# och C++ utför kopieringsåtgärden och minskar sedan pekaren till adressen för nästa plats i den ohanterade ANSI-strängen och ökar pekaren till nästa adress i det ohanterade blocket.

  5. Alla exempel anropar Marshal.PtrToStringAnsi för att konvertera det ohanterade minnesblocket som innehåller den kopierade ANSI-strängen till ett hanterat Unicode-objekt String .

  6. När du har visat de ursprungliga och omvända strängarna anropar FreeHGlobal alla exempel metoden för att frigöra det minne som allokerats för den ohanterade ANSI-strängen och det ohanterade minnesblocket.

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

Kommentarer

Typen IntPtr är utformad för att vara ett heltal vars storlek är samma som en pekare. En instans av den här typen förväntas alltså vara 32 bitar i en 32-bitarsprocess och 64 bitar i en 64-bitarsprocess.

Typen IntPtr kan användas av språk som stöder pekare och som ett vanligt sätt att referera till data mellan språk som inte stöder pekare.

IntPtr objekt kan också användas för att lagra referenser. Till exempel används instanser av IntPtr i stor utsträckning i System.IO.FileStream klassen för att lagra filhandtag.

Note

Att använda IntPtr som pekare eller handtag är felbenäget och osäkert. Det är helt enkelt en heltalstyp som kan användas som ett utbytesformat för pekare och handtag på grund av samma storlek. Utanför specifika utbyteskrav, till exempel för att skicka data till ett språk som inte stöder pekare, bör en korrekt typad pekare användas för att representera pekare och SafeHandle användas för att representera referenser.

Den här typen implementerar ISerializable. I .NET 5 och senare versioner implementerar den här typen även gränssnitten IFormattable. I .NET 7 och senare versioner implementerar den här typen även gränssnitten IBinaryInteger<TSelf>, IMinMaxValue<TSelf> och ISignedNumber<TSelf>.

I C# från version 9.0 kan du använda den inbyggda nint typen för att definiera inbyggda heltal. Den här typen representeras av IntPtr typen internt och tillhandahåller åtgärder och konverteringar som är lämpliga för heltalstyper. Mer information finns i typerna nint och nuint.

I C# från och med version 11 och när .NET 7 eller senare körs är nint ett alias för IntPtr på samma sätt som int är ett alias för Int32.

Konstruktorer

Name Description
IntPtr(Int32)

Initierar en ny instans av IntPtr att använda det angivna 32-bitars signerade heltalet.

IntPtr(Int64)

Initierar en ny instans av IntPtr att använda det angivna 64-bitars signerade heltalet.

IntPtr(Void*)

Initierar en ny instans av IntPtr att använda den angivna pekaren till en ospecificerad typ.

Fält

Name Description
Zero

Ett skrivskyddat fält som representerar ett signerat heltal som har initierats till noll.

Egenskaper

Name Description
MaxValue

Hämtar det största möjliga värdet för IntPtr.

MinValue

Hämtar det minsta möjliga värdet för IntPtr.

Size

Hämtar storleken på den här instansen.

Metoder

Name Description
Abs(IntPtr)

Beräknar det absoluta värdet.

Add(IntPtr, Int32)

Lägger till en förskjutning i ett signerat heltal.

BigMul(IntPtr, IntPtr, IntPtr)

Genererar den fullständiga produkten av två osignerade inbyggda heltal.

Clamp(IntPtr, IntPtr, IntPtr)

Klämmer fast ett värde till ett inkluderande lägsta och högsta värde.

CompareTo(IntPtr)

Jämför den aktuella instansen med ett annat objekt av samma typ och returnerar ett heltal som anger om den aktuella instansen föregår, följer eller inträffar i samma position i sorteringsordningen som det andra objektet.

CompareTo(Object)

Jämför den aktuella instansen med ett annat objekt av samma typ och returnerar ett heltal som anger om den aktuella instansen föregår, följer eller inträffar i samma position i sorteringsordningen som det andra objektet.

CopySign(IntPtr, IntPtr)

Kopierar tecknet för ett värde till tecknet för ett annat värde.

CreateChecked<TOther>(TOther)

Skapar en instans av den aktuella typen från ett värde, vilket utlöser ett spill-undantag för värden som ligger utanför det representerarbara intervallet för den aktuella typen.

CreateSaturating<TOther>(TOther)

Skapar en instans av den aktuella typen från ett värde som mättar alla värden som ligger utanför det representerarbara intervallet för den aktuella typen.

CreateTruncating<TOther>(TOther)

Skapar en instans av den aktuella typen från ett värde och trunkerar alla värden som ligger utanför det representerarbara intervallet för den aktuella typen.

DivRem(IntPtr, IntPtr)

Beräknar kvoten och resten av två värden.

Equals(IntPtr)

Anger om det aktuella objektet är lika med ett annat objekt av samma typ.

Equals(Object)

Returnerar ett värde som anger om den här instansen är lika med ett angivet objekt.

GetHashCode()

Returnerar hash-koden för den här instansen.

IsEvenInteger(IntPtr)

Avgör om ett värde representerar ett jämnt heltal.

IsNegative(IntPtr)

Avgör om ett värde är negativt.

IsOddInteger(IntPtr)

Avgör om ett värde representerar ett udda integraltal.

IsPositive(IntPtr)

Avgör om ett värde är positivt.

IsPow2(IntPtr)

Avgör om ett värde är en kraft på två.

LeadingZeroCount(IntPtr)

Beräknar antalet inledande nollor i ett värde.

Log10(IntPtr)

Representerar ett signerat heltal där bitbredden är samma som en pekare.

Log2(IntPtr)

Beräknar log2 för ett värde.

Max(IntPtr, IntPtr)

Jämför två värden med beräkning som är större.

MaxMagnitude(IntPtr, IntPtr)

Jämför två värden med beräkning som är större.

Min(IntPtr, IntPtr)

Jämför två värden med beräkning som är mindre.

MinMagnitude(IntPtr, IntPtr)

Jämför två värden med beräkning som är mindre.

Parse(ReadOnlySpan<Byte>, IFormatProvider)

Parsar ett intervall med UTF-8 tecken till ett värde.

Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider)

Parsar ett intervall med UTF-8 tecken till ett värde.

Parse(ReadOnlySpan<Char>, IFormatProvider)

Parsar ett teckenintervall till ett värde.

Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)

Konverterar det skrivskyddade intervallet för teckenrepresentation av ett tal i ett angivet format och kulturspecifikt format till dess signerade inbyggda heltalsmotsvarighet.

Parse(String, IFormatProvider)

Konverterar strängrepresentationen av ett tal i ett angivet kulturspecifikt format till dess signerade inbyggda heltalsmotsvarighet.

Parse(String, NumberStyles, IFormatProvider)

Konverterar strängrepresentationen av ett tal i ett angivet format och kulturspecifikt format till dess signerade inbyggda heltalsmotsvarighet.

Parse(String, NumberStyles)

Konverterar strängrepresentationen av ett tal i ett angivet format till dess signerade inbyggda heltalsmotsvarighet.

Parse(String)

Konverterar strängrepresentationen av ett tal till dess signerade inbyggda heltalsmotsvarighet.

PopCount(IntPtr)

Beräknar antalet bitar som anges i ett värde.

RotateLeft(IntPtr, Int32)

Roterar ett värde som lämnas av ett angivet belopp.

RotateRight(IntPtr, Int32)

Roterar ett värde höger med ett angivet belopp.

Sign(IntPtr)

Beräknar tecknet för ett värde.

Subtract(IntPtr, Int32)

Subtraherar en förskjutning från ett signerat heltal.

ToInt32()

Konverterar värdet för den här instansen till ett 32-bitars signerat heltal.

ToInt64()

Konverterar värdet för den här instansen till ett 64-bitars signerat heltal.

ToPointer()

Konverterar värdet för den här instansen till en pekare till en ospecificerad typ.

ToString()

Konverterar det aktuella objektets numeriska värde IntPtr till motsvarande strängrepresentation.

ToString(IFormatProvider)

Konverterar det numeriska värdet för den här instansen till motsvarande strängrepresentation med det angivna formatet och den kulturspecifika formatinformationen.

ToString(String, IFormatProvider)

Formaterar värdet för den aktuella instansen med det angivna formatet.

ToString(String)

Konverterar det aktuella objektets numeriska värde IntPtr till motsvarande strängrepresentation.

TrailingZeroCount(IntPtr)

Beräknar antalet avslutande nollor i ett värde.

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

Försöker formatera värdet för den aktuella instansen som UTF-8 i det angivna byteintervallet.

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

Försöker formatera värdet för den aktuella instansen till det angivna intervallet med tecken.

TryParse(ReadOnlySpan<Byte>, IFormatProvider, IntPtr)

Försöker parsa ett intervall med UTF-8 tecken till ett värde.

TryParse(ReadOnlySpan<Byte>, IntPtr)

Försöker konvertera ett UTF-8-teckensintervall som innehåller strängrepresentationen av ett tal till dess signerade heltalsekvivalent.

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

Försöker parsa ett intervall med UTF-8 tecken till ett värde.

TryParse(ReadOnlySpan<Char>, IFormatProvider, IntPtr)

Försöker parsa en sträng till ett värde.

TryParse(ReadOnlySpan<Char>, IntPtr)

Konverterar det skrivskyddade intervallet för teckenrepresentation av ett tal till dess signerade inbyggda heltalsmotsvarighet. Ett returvärde anger om konverteringen lyckades.

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

Konverterar det skrivskyddade intervallet för teckenrepresentation av ett tal i ett angivet format och kulturspecifikt format till dess signerade inbyggda heltalsmotsvarighet. Ett returvärde anger om konverteringen lyckades.

TryParse(String, IFormatProvider, IntPtr)

Försöker parsa en sträng till ett värde.

TryParse(String, IntPtr)

Konverterar strängrepresentationen av ett tal till dess signerade inbyggda heltalsmotsvarighet. Ett returvärde anger om konverteringen lyckades.

TryParse(String, NumberStyles, IFormatProvider, IntPtr)

Konverterar strängrepresentationen av ett tal i ett angivet format och kulturspecifikt format till dess signerade inbyggda heltalsmotsvarighet. Ett returvärde anger om konverteringen lyckades.

Operatorer

Name Description
Addition(IntPtr, Int32)

Lägger till en förskjutning i ett signerat heltal.

Equality(IntPtr, IntPtr)

Avgör om två angivna instanser av IntPtr är lika med.

Explicit(Int32 to IntPtr)

Konverterar värdet för ett 32-bitars signerat heltal till ett IntPtr.

Explicit(Int64 to IntPtr)

Konverterar värdet för ett 64-bitars signerat heltal till ett IntPtr.

Explicit(IntPtr to Int32)

Konverterar värdet för det angivna IntPtr till ett 32-bitars signerat heltal.

Explicit(IntPtr to Int64)

Konverterar värdet för det angivna IntPtr till ett 64-bitars signerat heltal.

Explicit(IntPtr to Void*)

Konverterar värdet för den angivna IntPtr till en pekare till en ospecificerad typ.

Detta API uppfyller inte CLS.

Explicit(Void* to IntPtr)

Konverterar den angivna pekaren till en ospecificerad typ till en IntPtr.

Detta API uppfyller inte CLS.

Inequality(IntPtr, IntPtr)

Avgör om två angivna instanser av IntPtr inte är lika med.

Subtraction(IntPtr, Int32)

Subtraherar en förskjutning från ett signerat heltal.

Explicita gränssnittsimplementeringar

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

Lägger till två värden tillsammans för att beräkna summan.

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

Lägger till två värden tillsammans för att beräkna summan.

IAdditiveIdentity<IntPtr,IntPtr>.AdditiveIdentity

Hämtar den aktuella typens additiva identitet.

IBinaryInteger<IntPtr>.GetByteCount()

Hämtar antalet byte som ska skrivas som en del av TryWriteLittleEndian(Span<Byte>, Int32).

IBinaryInteger<IntPtr>.GetShortestBitLength()

Hämtar längden, i bitar, på de kortaste tvås komplementrepresentation av det aktuella värdet.

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

Representerar ett signerat heltal där bitbredden är samma som en pekare.

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

Representerar ett signerat heltal där bitbredden är samma som en pekare.

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

Försöker skriva det aktuella värdet, i stor endianskt format, till ett givet intervall.

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

Försöker skriva det aktuella värdet, i lite endianskt format, till ett givet intervall.

IBinaryNumber<IntPtr>.AllBitsSet

Hämtar en instans av den binära typen där alla bitar anges.

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

Beräknar bitvis och av två värden.

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

Beräknar bitvis eller två värden.

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

Beräknar uteslutande eller av två värden.

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

Beräknar enkomplementrepresentationen av ett visst värde.

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

Jämför två värden för att avgöra vilket som är större.

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

Jämför två värden för att avgöra vilket som är större eller lika med.

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

Jämför två värden för att avgöra vilket som är mindre.

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

Jämför två värden för att avgöra vilket som är mindre eller lika med.

IDecrementOperators<IntPtr>.CheckedDecrement(IntPtr)

Minskar ett värde.

IDecrementOperators<IntPtr>.Decrement(IntPtr)

Minskar ett värde.

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

Delar upp ett värde med ett annat för att beräkna deras kvot.

IEquatable<IntPtr>.Equals(IntPtr)

Returnerar ett värde som anger om den här instansen är lika med ett annat signerat heltal.

IIncrementOperators<IntPtr>.CheckedIncrement(IntPtr)

Ökar ett värde.

IIncrementOperators<IntPtr>.Increment(IntPtr)

Ökar ett värde.

IMinMaxValue<IntPtr>.MaxValue

Hämtar det maximala värdet för den aktuella typen.

IMinMaxValue<IntPtr>.MinValue

Hämtar det lägsta värdet för den aktuella typen.

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

Delar upp två värden för att beräkna deras modulus eller rest.

IMultiplicativeIdentity<IntPtr,IntPtr>.MultiplicativeIdentity

Hämtar den multiplicativa identiteten för den aktuella typen.

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

Multiplicerar två värden tillsammans för att beräkna produkten.

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

Multiplicerar två värden tillsammans för att beräkna produkten.

INumber<IntPtr>.MaxNumber(IntPtr, IntPtr)

Jämför två värden med beräkning som är större och returnerar det andra värdet om en indata är NaN.

INumber<IntPtr>.MinNumber(IntPtr, IntPtr)

Jämför två värden med beräkning som är mindre och returnerar det andra värdet om en indata är NaN.

INumberBase<IntPtr>.IsCanonical(IntPtr)

Avgör om ett värde finns i dess kanoniska representation.

INumberBase<IntPtr>.IsComplexNumber(IntPtr)

Avgör om ett värde representerar ett komplext tal.

INumberBase<IntPtr>.IsFinite(IntPtr)

Avgör om ett värde är begränsat.

INumberBase<IntPtr>.IsImaginaryNumber(IntPtr)

Avgör om ett värde representerar ett rent imaginärt tal.

INumberBase<IntPtr>.IsInfinity(IntPtr)

Avgör om ett värde är oändligt.

INumberBase<IntPtr>.IsInteger(IntPtr)

Avgör om ett värde representerar ett heltal.

INumberBase<IntPtr>.IsNaN(IntPtr)

Avgör om ett värde är NaN.

INumberBase<IntPtr>.IsNegativeInfinity(IntPtr)

Avgör om ett värde är negativ oändlighet.

INumberBase<IntPtr>.IsNormal(IntPtr)

Avgör om ett värde är normalt.

INumberBase<IntPtr>.IsPositiveInfinity(IntPtr)

Avgör om ett värde är positiv oändlighet.

INumberBase<IntPtr>.IsRealNumber(IntPtr)

Avgör om ett värde representerar ett verkligt tal.

INumberBase<IntPtr>.IsSubnormal(IntPtr)

Avgör om ett värde är subnormalt.

INumberBase<IntPtr>.IsZero(IntPtr)

Avgör om ett värde är noll.

INumberBase<IntPtr>.MaxMagnitudeNumber(IntPtr, IntPtr)

Jämför två värden med beräkning som har större storlek och returnerar det andra värdet om en indata är NaN.

INumberBase<IntPtr>.MinMagnitudeNumber(IntPtr, IntPtr)

Jämför två värden med beräkning som har mindre storlek och returnerar det andra värdet om en indata är NaN.

INumberBase<IntPtr>.MultiplyAddEstimate(IntPtr, IntPtr, IntPtr)

Beräknar en uppskattning av (left * right) + addend.

INumberBase<IntPtr>.One

Hämtar värdet 1 för typen.

INumberBase<IntPtr>.Radix

Hämtar radixet, eller basen, för typen.

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

Representerar ett signerat heltal där bitbredden är samma som en pekare.

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

Representerar ett signerat heltal där bitbredden är samma som en pekare.

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

Representerar ett signerat heltal där bitbredden är samma som en pekare.

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

Försöker konvertera en instans av den aktuella typen till en annan typ, vilket utlöser ett spill-undantag för värden som ligger utanför det representerarbara intervallet för den aktuella typen.

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

Försöker konvertera en instans av den aktuella typen till en annan typ, vilket mättar alla värden som ligger utanför det representerarbara intervallet för den aktuella typen.

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

Försöker konvertera en instans av den aktuella typen till en annan typ och trunkerar alla värden som ligger utanför det representerarbara intervallet för den aktuella typen.

INumberBase<IntPtr>.Zero

Hämtar värdet 0 för typen.

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Fyller i ett SerializationInfo objekt med de data som behövs för att serialisera det aktuella IntPtr objektet.

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

Flyttar ett värde som lämnas av ett visst belopp.

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

Flyttar ett värde efter ett visst belopp.

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

Flyttar ett värde efter ett visst belopp.

ISignedNumber<IntPtr>.NegativeOne

Hämtar värdet -1 för typen.

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

Subtraherar två värden för att beräkna skillnaden.

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

Subtraherar två värden för att beräkna skillnaden.

IUnaryNegationOperators<IntPtr,IntPtr>.CheckedUnaryNegation(IntPtr)

Beräknar den kontrollerade obevakade negationen av ett värde.

IUnaryNegationOperators<IntPtr,IntPtr>.UnaryNegation(IntPtr)

Beräknar en oharisk negation av ett värde.

IUnaryPlusOperators<IntPtr,IntPtr>.UnaryPlus(IntPtr)

Beräknar det unary plus av ett värde.

Gäller för

Trådsäkerhet

Den här typen är trådsäker.

Se även