Close.and中的CloseHandle()winapi调用的参数

时间:2009-08-26 06:34:22

标签: c# .net vb.net interop

当通过.net P / Invoke访问winapi方法CloseHandle()时,参数应该是IntPtr还是HandleRef,为什么?

2 个答案:

答案 0 :(得分:2)

这是您的选择,具体取决于您获得手柄的方式。如果句柄最初嵌入在某个托管对象中,则应使用HandleRef。如果您从其他PInvoke函数获得句柄,并且.NET“不知道”它们,请使用IntPtr。

HandleRef的优点是.NET承诺只要HandleRef存在就保持容器对象存活,但是然后只调整API函数的句柄。在CloseHandle的特定情况下,这并不重要,因此IntPtr应该没问题。

答案 1 :(得分:1)

HandleRef Structure documentation对其重要性有一个很好的解释。它与垃圾收集器的正常功能有关。