[英]HANDLE (IntPtr) Obsolete, kernel32.dll, SafeFileHandle to IntPtr
[英]SafeFileHandle in DLL import
这是我第一次使用P / Invoke与设备驱动程序进行交互。 在DeviceIoControl函数中,我使用SafeFileHandle来处理设备, pinvoke.net说:
如果您使用SafeFileHandle,请不要调用CloseHandle,因为CLR会为您关闭它。
但在C#Cookbook中我发现了CloseHandle的这种签名:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool CloseHandle(SafeFileHandle hObject);
真相是什么?
SafeFileHandle
在其ReleaseHandle
方法内部调用CloseHandle
,并且设计用于Disposable
模式,因此您不希望使用CloseHandle(SafeFileHandle)
手动关闭句柄(只需调用Close
方法或Dispose
)。
当SafeFileHandle
被sealed
,我真的没有看到“ public static extern bool CloseHandle(SafeFileHandle hObject);
”签名中的任何一点。
编辑
我只是用Google搜索了你的书 ,发现了一个CloseHandle(SafeFileHandle)
参考。 正如预期的那样,它没有被使用, SafeFileHandle
使用以下方法正确关闭:
private void ClosePipe()
{
if (!_handle.IsInvalid)
{
_handle.Close();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.