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.Zero-Feld

 

Veröffentlicht: Oktober 2016

Ein schreibgeschütztes Feld, das einen mit 0 (null) initialisierten Zeiger oder ein Handle darstellt.

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

public static readonly IntPtr Zero

Feldwert

Type: System.IntPtr

Der Wert dieses Felds ist nicht gleichbedeutend mit null. Mit diesem Feld können Sie um effizient zu ermitteln, ob eine Instanz von IntPtr auf einen anderen Wert als 0 (null) festgelegt wurde.

Nehmen wir beispielsweise an, die Variable, die IP-Adresse ist eine Instanz der IntPtr. Sie können feststellen, ob er festgelegt wurde, indem sie z. B. von einem Konstruktor zurückgegebenen Wert vergleichen: " if ip != new IntPtr(0)... ". Allerdings ist das Aufrufen eines Konstruktors zum Abrufen einer nicht initialisierten Zeigers ineffizient. Es ist besser, entweder " if ip != IntPtr.Zero... ", oder " if !IntPtr.Zero.Equals(ip)... ".

Wenn die Windows-API von verwaltetem Code aufrufen, übergeben Sie IntPtr.Zero anstelle von null Wenn ein Argument erwartet wird, um entweder einen Zeiger oder ein null. Beispielsweise beim folgenden Aufruf der Windows CreateFile Funktion stellt IntPtr.Zero für die pSecurityAttributes und hTemplateFile Argumentwerte gelten.

using Microsoft.Win32.SafeHandles;
using System;
using System.Runtime.InteropServices;

public class Example
{
   private const uint GENERIC_READ = 0x80000000;
   private const uint OPEN_EXISTING = 3; 
   private const uint FILE_ATTRIBUTE_NORMAL = 128;
   private const uint FILE_FLAG_OVERLAPPED = 0x40000000;

   [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
   private static extern Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(
            string lpFileName, System.UInt32 dwDesiredAccess, System.UInt32 dwShareMode, 
            IntPtr pSecurityAttributes, System.UInt32 dwCreationDisposition, 
            System.UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile);

   public static void Main()
   {
      SafeFileHandle hnd = CreateFile("CallOfTheWild.txt", GENERIC_READ, 0, 
                                      IntPtr.Zero, OPEN_EXISTING,
                                      FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 
                                      IntPtr.Zero);
      if (hnd.IsInvalid) {
            Exception ex = Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());
            Console.WriteLine("Attempt to open file failed:");
            Console.WriteLine("  {0}", ex.Message);
            return;           
      }                        
      else {
         Console.WriteLine("File successfully opened.");
         hnd.Close();     
      }
   }
}
// If the file cannot be found, the example displays the following output:
//    Attempt to open file failed:
//      The system cannot find the file specified. (Exception from HRESULT: 0x80070002)
System_CAPS_noteHinweis

Obwohl Zero entspricht null für Windows-API-Funktionen mit Parametern oder Rückgabewerten, die beide Zeiger werden können oder null, Zero entspricht nicht dem null. Übergeben von null auf die IntPtr.Zero.Equals immer Methodenrückgabe false.

Sie können auch testen, für eine null Rückgabewert aus Windows-API-Funktionsaufrufe ein, die entweder einen Zeiger zurückgeben oder ein null durch Vergleichen des zurückgegebenen Werts mit IntPtr.Zero. Z. B. der Aufruf der GetWindow Funktion im folgenden Beispiel versucht, die das Handle eines Fensters nicht existierende abgerufen werden soll. Wenn sie von nicht verwaltetem Code aufgerufen wurden, würde die Funktion zurückgeben null, wenn sie aus verwaltetem Code aufgerufen wird, gibt jedoch IntPtr.Zero.

using System;
using System.Runtime.InteropServices;

public class Example
{
   private const int GW_OWNER = 4;

   [DllImport("user32", CharSet=CharSet.Auto, SetLastError=true, ExactSpelling=true)]
   public static extern IntPtr GetWindow(IntPtr hwnd, int wFlag);   

   public static void Main()
   {
      IntPtr hwnd = new IntPtr(3);
      IntPtr hOwner = GetWindow(hwnd, GW_OWNER);
      if (hOwner == IntPtr.Zero)
         Console.WriteLine("Window not found.");
   }
}
// The example displays the following output:
//        Window not found.

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: