【发布时间】:2009-08-26 06:34:21
【问题描述】:
通过.net P/Invoke访问winapi方法CloseHandle()时,参数应该是IntPtr还是HandleRef,为什么?
【问题讨论】:
-
然后把问题放到正文中,做一个更好的标题。
-
@Guffa - 或者你可以编辑问题
通过.net P/Invoke访问winapi方法CloseHandle()时,参数应该是IntPtr还是HandleRef,为什么?
【问题讨论】:
这真的是你的选择,取决于你如何获得手柄。如果句柄最初嵌入在某个托管对象中,则应使用 HandleRef。如果您从其他 PInvoke 函数获得句柄,而 .NET 对它们“一无所知”,请使用 IntPtr。
HandleRef 的优点是 .NET 承诺只要 HandleRef 存在就使容器对象保持活动状态,但随后仅编组 API 函数的句柄。在 CloseHandle 的具体情况下,这并不重要,所以 IntPtr 应该没问题。
【讨论】:
HandleRef Structure documentation 很好地解释了它的重要性。它与垃圾收集器的正确功能有关。
【讨论】: