Разница между SafeProcessHandle и IntPtr для вызова API
Работая с WinAPI, я решил реализовать вызов GetProcessAfinityMask в моем приложении на C#. Тем не менее, я видел две разные подписи для этой функции.
Один из них использует SafeProcessHandle
для ручки:
[DllImport("kernel32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern bool GetProcessAffinityMask(SafeProcessHandle handle, out IntPtr processMask, out IntPtr systemMask);
Другая возможная версия ( на P / Invoke) использует IntPtr
:
[DllImport("kernel32.dll",SetLastError = true)]
static extern bool GetProcessAffinityMask(IntPtr hProcess,
out UIntPtr lpProcessAffinityMask, out UIntPtr lpSystemAffinityMask);
Учитывая, что обе функции возвращают одинаковые значения, в чем разница между передачей SafeProcessHandle
экземпляр или IntPtr
?
1 ответ
Решение
Безопасные ручки и критическое завершение В статье MSDN описывается это различие.