如何在C#.Net中向Win32 API传递空指针?
我正在查看RegisterHotKey函数:如何在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
我一直在使用
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的地址),因此它与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);