Как получить последнюю ошибку (WSAGetLastError)?

4 ответа

[DllImport("ws2_32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern Int32 WSAGetLastError();

Также на pinvoke.net сказано:

Вы никогда не должны вызывать GetLastError. Вместо этого вызовите Marshal.GetLastWin32Error!

System.Runtime.InteropServices.Marshal.GetLastWin32Error ()

20
ответ дан 5 December 2019 в 06:39
поделиться

WSAGetLastError - это просто оболочка для функции Win32 GetLastError .

Если вы работаете с P / Invoke, вы можете использовать параметр SetLastError для атрибута DllImport . Он сообщает .NET, что импортированная функция будет вызывать SetLastError () и что значение должно быть собрано.

Если импортированная функция завершается с ошибкой, вы можете получить последнюю ошибку с помощью Marshal. GetLastWin32Error () . Кроме того, вы можете просто сгенерировать новую Win32Exception () , которая использует это значение автоматически.

Если вы не работаете с P / Invoke, вам не повезло: нет гарантии, что Значение последней ошибки будет сохраняться достаточно долго, чтобы вернуться через несколько уровней кода .NET. На самом деле, я

7
ответ дан 5 December 2019 в 06:39
поделиться

Не имеет особого смысла вызывать эту функцию из управляемого кода. Это имеет смысл в неуправляемом коде, потому что вы знаете точную последнюю функцию Win32, которая была вызвана, поэтому вы знаете, какая функция должна была установить последнюю ошибку. В управляемом коде вы не знаете, какие функции были вызваны.

Возможно, вы могли бы использовать P / Invoke для вызова функции; это просто не поможет тебе. Чего вы пытаетесь достичь?

0
ответ дан 5 December 2019 в 06:39
поделиться

Вот как я видел в сети, как поместить GetLastError в механизм исключений C # и как вернуть его обратно ...

-2
ответ дан 5 December 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: