Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Campo IntPtr.Zero

Um campo somente leitura que representa um ponteiro ou um identificador que são zerados.

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

public static readonly IntPtr Zero

O valor desse campo não é equivalente a null. Use este campo para eficientemente determinar se uma instância de IntPtr foi definida para um outro valor diferente de zero.

Por exemplo, suponha que a variável, IP, é uma instância de IntPtr. Você pode determinar se tiver sido definido para comparar o valor retornado por um construtor, por exemplo: “ if ip != new IntPtr(0)... ”. No entanto, invocar um construtor para obter um ponteiro unintialized é ineficiente. É melhor codificar if ip != IntPtr.Zero... ”, “ou “ if !IntPtr.Zero.Equals(ip)... ”.

Ao chamar a API de 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 à função de CreateFile do windows fornece IntPtr.Zero para os valores de argumento de pSecurityAttributes e de hTemplateFile .


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)


ObservaçãoObservação

Embora Zero é equivalente a null para funções de API do windows com parâmetros ou valores de retorno que podem ser ponteiros ou null, Zero não é equivalente a null. Passando null ao método de IntPtr.Zero.Equals sempre retorna false.

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


.NET Framework

Com suporte em: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Biblioteca de Classes Portátil

Com suporte em: Biblioteca de Classes Portátil

.NET para aplicativos da Windows Store

Com suporte em: Windows 8

.NET para aplicativos do Windows Phone

Com suporte em: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos do sistema do .NET Framework.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2015 Microsoft