İngilizce dilinde oku

Aracılığıyla paylaş


IntPtr.Zero Alan

Tanım

Sıfıra başlatılan imzalı bir tamsayıyı temsil eden salt okunur alan.

C#
public static readonly IntPtr Zero;

Alan Değeri

IntPtr

Açıklamalar

Bu alanın değeri ile nulleşdeğer değildir. Örneğinin IntPtr sıfır dışında bir değere ayarlanıp ayarlanmadığını verimli bir şekilde belirlemek için bu alanı kullanın.

Örneğin, ip değişkeninin bir örneği IntPtrolduğunu varsayalım. Bir oluşturucu tarafından döndürülen değerle karşılaştırarak ayarlandığını belirleyebilirsiniz, örneğin: " if ip != new IntPtr(0)... ". Ancak, başlatılmamış bir işaretçi almak için bir oluşturucu çağırmak verimsizdir. " " veya if !IntPtr.Zero.Equals(ip)... " if ip != IntPtr.Zero... kodlarını kullanmak daha iyidir.

Yönetilen koddan Windows API'sini çağırırken, bir bağımsız değişkenin null işaretçi veya nullolması bekleniyorsa yerine geçirebilirsinizIntPtr.Zero. Örneğin, aşağıdaki Windows CreateFile işlevi çağrısı ve hTemplateFile bağımsız değişken değerleri için pSecurityAttributes kaynak IntPtr.Zero sağlar.

C#
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)

Not

parametreleri olan Windows API işlevlerine eşdeğer olsa Zero da veya işaretçiler veya olabilecek dönüş değerleri ile eşdeğer olmasa danull, Zero ile eşdeğer nullnull değildir. yöntemine geçirilmesi nullIntPtr.Zero.Equals her zaman döndürür false.

Ayrıca, döndürülen değeri ile IntPtr.Zerokarşılaştırarak bir işaretçi veya bir null döndüren Windows API işlev çağrılarından bir dönüş değeri için null test edebilirsiniz. Örneğin, aşağıdaki örnekte işlevine yapılan GetWindow çağrı, var olmayan bir pencerenin tutamacını almaya çalışır. Yönetilmeyen koddan çağrılırsa işlev döndürür null, ancak yönetilen koddan çağrıldığında döndürür IntPtr.Zero.

C#
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.

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0