Czy IntPtr.Zero jest równoważne z null?

Próbuję skonfigurowaćReadFile działać asynchronicznie i zgodnie zMSDN, Muszę ustawićlpNumberOfBytesRead donull:

„Użyj NULL dla tego parametru, jeśli jest to operacja asynchroniczna, aby uniknąć potencjalnie błędnych wyników”.

Na przykład, jeśli mam następujące:

  [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
  public static extern bool ReadFile(
     IntPtr hFile,
     out byte[] aBuffer,
     int cbToRead,
     IntPtr cbThatWereRead,
     ref OVERLAPPED pOverlapped
  );

i nazywam to w ten sposób (z zamiarem, aby 4. parametr był zerowy):

Win32API.ReadFile(readHandle, out data_read, Win32API.BUFFER_SIZE, IntPtr.Zero, ref over_lapped);

czy będzie to tak samo jak nazywanie go null? Jeśli nie, co powinienem zmienić w deklaracji lub w wywołaniu funkcji?

Byłem też ciekawy, czy powinienem używaćSafeHandle lubHandleRef zamiastIntPtr dlahFile odniesienie? Wiem, żeby upewnić się, że zamknę uchwytCloseHandle(IntPtr) kiedy skończę, po prostu nie jestem pewien, czy istnieje inny powód, aby użyć pozostałych dwóch opcjiIntPtr. Staram się również unikać używania niebezpiecznego kodu.

EDYCJA: Jak się okazuje, nie powinienem ustawiać czwartego parametru naIntPtr.Zero w każdym razie, ponieważ mimo że działam asynchronicznie, wciąż może wrócić. WidziećAsynchronous Disk I / O. Ahh, uwielbiam sprzeczne historie.

questionAnswers(3)

yourAnswerToTheQuestion