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
Este tópico ainda não foi avaliado como - Avalie este tópico

Campo IntPtr.Zero

Um campo somente leitura que representa um ponteiro ou um identificador que sejam inicializados a zero.

Namespace:  System
Assembly:  mscorlib (em mscorlib.dll)
public static readonly IntPtr Zero

O valor deste 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, presuma a variável, IP, é uma instância de IntPtr. Você pode determinar se foi definido comparando para o valor retornado por um construtor, por exemplo: “ if ip != new IntPtr(0)... ”. No entanto, chamar um construtor para obter um ponteiro unintialized é ineficiente. É melhor código “ if ip != IntPtr.Zero... ”, ou “ if !IntPtr.Zero.Equals(ip)... ”.

Ao chamar o Windows API de código gerenciado, você pode passar IntPtr.Zero em vez de null se um argumento é esperado ser um ponteiro ou um null. Por exemplo, o seguinte chamada para a função do Windows CreateFile 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 da API do Windows com parâmetros ou valores de retorno que podem ser ponteiros ou null, Zero não é equivalente a null. Passando null para o método de IntPtr.Zero.Equals sempre retorna false.

Você também pode testar um valor de retorno de null de chamadas de função da API do Windows que retornam um ponteiro ou um 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 foi chamado de código não gerenciado, a função retornaria 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, 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

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.
Isso foi útil para você?
(1500 caracteres restantes)
Agradecemos os seus comentários

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft. Todos os direitos reservados.