Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Campo IntPtr.Zero

 

Publicado: abril de 2016

Um campo somente leitura que representa um ponteiro ou identificador que foi inicializado para zero.

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

public static readonly IntPtr Zero

Valor do Campo

Type: System.IntPtr

O valor do campo não é equivalente a null. Use este campo para determinar com eficiência se uma instância do IntPtr foi definida como um valor diferente de zero.

Por exemplo, suponha que a variável de ip, é uma instância de IntPtr. Você pode determinar se ele foi definido, comparando-o como o valor retornado por um construtor, por exemplo: " if ip != new IntPtr(0)... ". No entanto, é ineficiente chamar um construtor para obter um ponteiro não inicializado. É melhor codificar um " if ip != IntPtr.Zero... ", ou " if !IntPtr.Zero.Equals(ip)... ".

Ao chamar a API do Windows do código gerenciado, você pode passar IntPtr.Zero em vez de null se um argumento deve ser um ponteiro ou um null. Por exemplo, a seguinte chamada para o Windows CreateFile função fontes IntPtr.Zero para o pSecurityAttributes e hTemplateFile valores de argumento.

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_noteObservação

Embora Zero é equivalente a null para funções de API do Windows com parâmetros ou valores de retorno podem ser qualquer um dos ponteiros ou null, Zero não é equivalente a null. Passando null para o IntPtr.Zero.Equals método sempre retornará false.

Você também pode testar uma null valor de retorno de chamadas de função de API do Windows que retornam um ponteiro ou um null comparando o valor retornado com IntPtr.Zero. Por exemplo, a chamada para o GetWindow função no exemplo a seguir tenta recuperar o identificador de uma janela inexistente. Se ele tiver sido chamado de código não gerenciado, a função retornará null, mas quando ele é chamado de código gerenciado, ele retorna 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.

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Windows Phone
Disponível desde 8.1
Retornar ao início
Mostrar: