如何获取最后一个错误(WSAGetLastError)?

Iva*_*nov 8 .net c# error-handling pinvoke winapi

如何WSAGetLastError()从WinAPI 调用,以便获得有效的文本错误?

aba*_*hev 20

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

此外,在pinvoke.net上,它说:

你永远不应该PInvoke到GetLastError.请改为调用Marshal.GetLastWin32Error!

System.Runtime.InteropServices.Marshal.GetLastWin32Error()

  • мерси!评论.长度= 10; (3认同)

Rog*_*mbe 7

WSAGetLastError只是Win32 GetLastError函数的包装器.

如果您正在使用P/Invoke进行操作,则可以将该SetLastError参数用于该DllImport属性.它告诉.NET导入的函数将调用SetLastError(),并且应该收集该值.

如果导入的函数失败,您可以使用Marshal.GetLastWin32Error().或者,您也可以throw new Win32Exception()自动使用此值.

如果你没有用P/Invoke做事,那你就不走运了:不能保证最后一个错误值会保留足够长的时间,以便通过多层.NET代码返回它.事实上,我将链接到Adam Nathan:永远不要为GetLastError定义PInvoke签名.