![](/img/trans.png)
[英]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.