(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

IntPtr.Zero-Feld

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

Der Wert dieses Felds entspricht nicht null. Mit diesem Feld kann effizient ermittelt werden, ob eine Instanz von IntPtr auf einen anderen Wert als 0 (null) festgelegt wurde.

Angenommen, die Variable ip ist eine Instanz von IntPtr. Sie können ermitteln, ob diese festgelegt wurde, indem Sie sie mit dem von einem Konstruktor zurückgegebenen Wert vergleichen. Beispiel: "if ip != new IntPtr(0)...". Der Aufruf eines Konstruktors zum Abruf eines nicht initialisierten Zeigers ist allerdings ineffizient. Es ist besser, entweder "if ip != IntPtr.Zero..." oder "if !IntPtr.Zero.Equals(ip)..." zu schreiben.

Wenn Sie die Windows-API vom verwalteten Code aufrufen, können Sie IntPtr.Zero statt null, wenn ein Argument erwartet wird, um entweder ein Zeiger oder null. Beispielsweise gibt die folgende Aufruf der CreateFile-Funktion von IntPtr.Zero für die pSecurityAttributes und hTemplateFile-Argumentwerte an.


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)


HinweisHinweis

Obwohl Zero auf null für Windows-API funktioniert mit Parametern entspricht, oder Rückgabewerten, die entweder Zeiger oder null sein können, Zero nicht in null entspricht. null zur IntPtr.Zero.Equals-Methode übergeben wird, gibt immer false zurück.

Sie können für ein null den Rückgabewert von Windows-API-Funktionsaufrufen auch testen, die entweder einen Zeiger oder null zurückgeben, indem den zurückgegebenen Wert mit IntPtr.Zero vergleichen. Beispielsweise versucht der Aufruf der Funktion GetWindow im folgenden Beispiel, das Handle eines nicht vorhandenen Fenster abzurufen. Wenn er von nicht verwaltetem Code aufgerufen wurde, wird die Funktion null zurück, aber, wenn es über verwalteten Code aufgerufen wird, wird IntPtr.Zero zurückgegeben.


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.


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

Es werden nicht alle Versionen sämtlicher Plattformen von .NET Framework unterstützt.. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.