如何在C#.Net中向Win32 API传递空指针?

如何在C#.Net中向Win32 API传递空指针?,c#,null,pinvoke,C#,Null,Pinvoke,我正在查看RegisterHotKey函数: 我一直在使用IntPtr传递第一个参数,它在大多数情况下都可以正常工作。但是现在我需要故意传递一个空指针作为第一个参数,而IntPtr(故意)不会这样做。我是.Net新手,这让我感到困惑。如何执行此操作?使用IntPtr.Zero表示NULL 例如: public void Example() { ... RegisterHotKey(IntPtr.Zero, id, mod, vk); } [DllImportAttribute("us

我正在查看RegisterHotKey函数:


我一直在使用
IntPtr
传递第一个参数,它在大多数情况下都可以正常工作。但是现在我需要故意传递一个空指针作为第一个参数,而
IntPtr
(故意)不会这样做。我是.Net新手,这让我感到困惑。如何执行此操作?

使用
IntPtr.Zero
表示
NULL

例如:

public void Example() {
  ...
  RegisterHotKey(IntPtr.Zero, id, mod, vk);
}

[DllImportAttribute("user32.dll", EntryPoint="RegisterHotKey")]
[return: MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool RegisterHotKey(
  IntPtr hWnd, 
  int id, 
  uint fsModifiers, 
  uint vk);

啊,我的印象是IntPtr.Zero代表一个指向整数值0的非空指针。@Thom,
IntPtr.Zero
是一个地址为0的指针。它实际上没有指向任何内容,因为取消对地址0的引用几乎肯定会导致崩溃或各种异常。C++值NULL具有相同的行为(指针为0的地址),因此它与 ItpTr.0/<代码>很好地匹配以传递第一个参数:
public void Example() {
  ...
  RegisterHotKey(IntPtr.Zero, id, mod, vk);
}

[DllImportAttribute("user32.dll", EntryPoint="RegisterHotKey")]
[return: MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool RegisterHotKey(
  IntPtr hWnd, 
  int id, 
  uint fsModifiers, 
  uint vk);