【问题标题】:How to pass null pointer to Win32 API in C# .Net?如何在 C# .Net 中将空指针传递给 Win32 API?
【发布时间】:2010-03-24 17:33:43
【问题描述】:

我在看RegisterHotKey函数:

http://msdn.microsoft.com/en-us/library/ms646309(VS.85).aspx

BOOL RegisterHotKey(
  __in  HWND hWnd,
  __in  int id,
  __in  UINT fsModifiers,
  __in  UINT vk
);

我一直使用IntPtr 来传递第一个参数,在大多数情况下都可以正常工作。但是现在我需要故意传递一个空指针作为第一个参数,IntPtr(故意)不会这样做。我是.Net 的新手,这让我很困惑。我该怎么做?

【问题讨论】:

标签: c# null pinvoke


【解决方案1】:

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 的指针),因此它与 IntPtr.Zero 很好地匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
相关资源
最近更新 更多