IntPtr Struct-datatyp
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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
- 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:
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.
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.
I Visual Basic-exemplet definieras en variabel med namnet
offsetsom ä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.
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 minskaroffsetsedan .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.
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 .
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 |
| 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 |
| 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 |
| 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 |
| INumberBase<IntPtr>.MultiplyAddEstimate(IntPtr, IntPtr, IntPtr) |
Beräknar en uppskattning av ( |
| INumberBase<IntPtr>.One |
Hämtar värdet |
| 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 |
| 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 |
| 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.