Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

IntPtr.ToPointer-Methode: ()

 

Veröffentlicht: Oktober 2016

Konvertiert den Wert dieser Instanz in einen Zeiger auf einen nicht angegebenen Typ.

Diese API ist nicht CLS-kompatibel.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

[CLSCompliantAttribute(false)]
public unsafe void* ToPointer()

Rückgabewert

Type: System.Void*

Ein Zeiger auf Void, d. h. ein Zeiger auf Speicher, der Daten eines nicht angegebenen Typs enthält.

Im folgenden Beispiel wird die verwaltete Zeiger auf die Zeichen in einem Array umkehren. Nachdem er initialisiert ein String -Objekt und ruft seine Länge wird Folgendes:

  • Ruft die Marshal.StringToHGlobalAnsi Methode, um die Unicode-Zeichenfolge als ANSI (1-Byte-Zeichen) in nicht verwalteten Speicher kopieren. Die Methode gibt ein IntPtr -Objekt, das auf den Anfang der nicht verwalteten Zeichenfolge zeigt.

  • Ruft die Marshal.AllocHGlobal Methode, um die gleiche Anzahl von Bytes zu reservieren, wie die nicht verwaltete Zeichenfolge belegt. Die Methode gibt ein IntPtr Objekt, das am Anfang des nicht verwalteten Speicherblocks zeigt.

  • Ruft die ToPointer Methode, um einen nicht verwalteten Zeiger auf die Startadresse der Zeichenfolge und den nicht verwalteten Speicherblock abzurufen und fügt einen kleiner als die Länge der Zeichenfolge, die die Startadresse der ANSI-Zeichenfolge. Da der nicht verwalteten Zeichenfolgenzeiger bis zum Ende der Zeichenfolge verweist, wird der Kopiervorgang ein Zeichen vom Ende der Zeichenfolge an den Anfang des Speicherblocks kopieren.

  • Verwendet eine Schleife um jedes Zeichen aus der Zeichenfolge in den nicht verwalteten Speicherblock zu kopieren. Nach jedem Kopiervorgang es verringert den Zeiger auf die Adresse der nächsten Position in der nicht verwalteten ANSI-Zeichenfolge und den Zeiger auf die nächste Adresse im nicht verwalteten Block erhöht.

  • Ruft die Marshal.PtrToStringAnsi den nicht verwaltete Speicherblock mit der kopierten ANSI-Zeichenfolge in einen verwalteten Unicode konvertiert String Objekt.

  • Nach dem Anzeigen der ursprünglichen und umgekehrten Zeichenfolgen, ruft die Marshal.FreeHGlobal Methode, um den Arbeitsspeicher für die nicht verwalteten ANSI-Zeichenfolge und den nicht verwalteten Speicherblock freizugeben.

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

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: