Đây là lần đầu tiên tôi cần sử dụng P/Invoke để tương tác với trình điều khiển thiết bị. Trong chức năng DeviceIoControl tôi sử dụng SafeFileHandle cho xử lý đến thiết bị và pinvoke.net nói:SafeFileHandle trong nhập DLL
Nếu bạn sử dụng một SafeFileHandle, đừng gọi CloseHandle như CLR sẽ đóng nó lại cho bạn.
Nhưng trong C# Cookbook tôi thấy chữ ký loại CloseHandle:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool CloseHandle(SafeFileHandle hObject);
sự thật là gì?
Nếu bạn muốn chịu trách nhiệm gọi 'CloseHandle' thì hãy khai báo xử lý của bạn thành' IntPtr'. –
@ David Heffernan, tôi chỉ không muốn đối phó với IntPtrs. Tôi đã nhầm lẫn khi tình cờ gặp đoạn mã này tại C# Cookbook. – Oksana
Nếu bạn định gọi 'DeviceIoControl' thì tôi đề nghị bạn vượt qua nỗi sợ của bạn về' IntPtr'. –