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();
此外,在pinvoke.net上,它说:
你永远不应该PInvoke到GetLastError.请改为调用Marshal.GetLastWin32Error!
System.Runtime.InteropServices.Marshal.GetLastWin32Error()
WSAGetLastError只是Win32 GetLastError函数的包装器.
如果您正在使用P/Invoke进行操作,则可以将该SetLastError参数用于该DllImport属性.它告诉.NET导入的函数将调用SetLastError(),并且应该收集该值.
如果导入的函数失败,您可以使用Marshal.GetLastWin32Error().或者,您也可以throw new Win32Exception()自动使用此值.
如果你没有用P/Invoke做事,那你就不走运了:不能保证最后一个错误值会保留足够长的时间,以便通过多层.NET代码返回它.事实上,我将链接到Adam Nathan:永远不要为GetLastError定义PInvoke签名.