当/为什么Marshal.GetLastWin32Error()返回负的错误代码?

时间:2013-05-24 05:10:37

标签: c# winapi interop

调用特定的Win32 API函数时(从C#到Interop),它会失败并返回一个负的错误代码

背景:

我在TAB内运行的Windows 8操作系统上执行此操作。

功能签名

[DllImport("dxva2.dll", EntryPoint = "GetMonitorCapabilities", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetMonitorCapabilities(
            IntPtr hMonitor, ref uint pdwMonitorCapabilities, ref uint pdwSupportedColorTemperatures);




Console.WriteLine(Marshal.GetLastWin32Error());
NativeMethods.GetMonitorCapabilities(hnd,ref x,ref y);
Console.WriteLine(Marshal.GetLastWin32Error());

以上代码报告

0 -1071241844

我认为错误代码范围在0到15999之间  this link

1 个答案:

答案 0 :(得分:5)

大多数情况下,如果某个函数返回负错误代码,则实际上是uint值。将-1071241844转换为uint得到3223725452,其为十六进制的0xC026258C。

在Google中搜索该十六进制错误代码导致this page显示错误为ERROR_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE。