WSAGetLastError
- это просто оболочка для функции Win32 GetLastError
.
Если вы работаете с P / Invoke, вы можете использовать параметр SetLastError
для атрибута DllImport
. Он сообщает .NET, что импортированная функция будет вызывать SetLastError()
, и что значение должно быть собрано.
Если импортированная функция не работает, вы можете получить последнюю ошибку, набрав Marshal.GetLastWin32Error()
. Кроме того, вы можете просто throw new Win32Exception()
, который использует это значение автоматически.
Если вы не работаете с P / Invoke, вам не повезло: нет гарантии, что значение последней ошибки будет сохраняться достаточно долго, чтобы вернуться через несколько уровней кода .NET. Фактически, я сделаю ссылку на Адама Натана: никогда не определяйте подпись PInvoke для GetLastError .