この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

IntPtr.Zero フィールド

 

公開日: 2016年10月

System_CAPS_noteメモ

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

0 に初期化されたポインターまたはハンドルを表す読み取り専用フィールド。

名前空間:   System
アセンブリ:  mscorlib (mscorlib.dll 内)

public static readonly IntPtr Zero

フィールドの値

Type: System.IntPtr

このフィールドの値はnullします。 このフィールドを使用してのインスタンスかどうかを効率的に判断IntPtrゼロ以外の値に設定されています。

たとえば、変数、ip がのインスタンスとIntPtrです。 たとえば、コンス トラクターによって返される値と比較することによって設定されているかどうかを指定できます:" if ip != new IntPtr(0)... "です。 ただし、初期化前の状態のポインターを取得するコンス トラクターを呼び出すは効率的ではありません。 いずれかをコーディングすることをお勧め" if ip != IntPtr.Zero... "、または" if !IntPtr.Zero.Equals(ip)... "です。

マネージ コードから Windows API を呼び出すときに渡すIntPtr.Zeroの代わりにnull引数がポインターであると予想される場合、またはnullです。 Windows の次の呼び出しなど、CreateFile関数の装置IntPtr.ZeropSecurityAttributeshTemplateFile引数の値。

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_noteメモ

Zeroは等価nullWindows API 関数のパラメーターまたは戻り値がどちらのポインターにすることができますまたはnullZeronullします。 渡すnullIntPtr.Zero.Equalsメソッドは常に返しますfalseです。

テストすることも、nullへのポインターで返された Windows API 関数呼び出しからの戻り値またはnullで返される値を比較することによってIntPtr.Zeroです。 呼び出しなど、GetWindow関数を次の例では、存在しないウィンドウのハンドルを取得しようとしています。 かどうかは、アンマネージ コードから呼び出された、関数が返すようnull、マネージ コードから呼び出されるとしてが返ります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.

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: