何时/为什么Marshal.GetLastWin32Error()返回负错误码

本文关键字:返回 错误 误码 为什么 Marshal GetLastWin32Error 何时 | 更新日期: 2023-09-27 18:15:02

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

背景:

我是在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之间这个链接

何时/为什么Marshal.GetLastWin32Error()返回负错误码

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

搜索十六进制错误代码在谷歌结果在这个页面显示,这是错误ERROR_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE