C# 负GetLastWin32Error()

C# 负GetLastWin32Error(),c#,debugging,winapi,getlasterror,C#,Debugging,Winapi,Getlasterror,我想知道如何调试或如何处理Marshal.GetLastWin32Error的负值 我一直在用我的电脑编写代码,突然它在另一台电脑上不工作了,我不知道该怎么办,因为我不知道有什么错误 我认为以下是代码的基本部分: [DllImport("setupapi.dll", SetLastError = true)] static extern bool SetupDiChangeState(IntPtr deviceInfoSet, [In] ref SP_DEVINFO_DATA deviceInf

我想知道如何调试或如何处理Marshal.GetLastWin32Error的负值

我一直在用我的电脑编写代码,突然它在另一台电脑上不工作了,我不知道该怎么办,因为我不知道有什么错误

我认为以下是代码的基本部分:

[DllImport("setupapi.dll", SetLastError = true)]
static extern bool SetupDiChangeState(IntPtr deviceInfoSet, [In] ref SP_DEVINFO_DATA deviceInfoData);

// and then somewhere
if (!SetupDiChangeState(info, ref device))
    throw new Exception(string.Format("Error({0}) SetupDiChangeState", Marshal.GetLastWin32Error()));
其他PC上的异常文本为

错误-536870389 SetupDiChangeState

它没有列出

错误-536870389 SetupDiChangeState

它是0xE000020B,可能对应于错误设备

查看您的DIFxAPI.h

错误-536870389 SetupDiChangeState

它是0xE000020B,可能对应于错误设备


请参阅您的DIFxAPI.h.

如果您的程序不方便以十六进制输出错误,您也可以使用calc.exe转换错误代码

首先,进入程序员模式

选择十六进制并输入100000000个一和八个零

返回Dec并减去错误代码的绝对值,在本例中为536870389

返回Hex查看十六进制错误代码,在本例中为E000020B


如果程序不方便以十六进制输出错误,也可以使用calc.exe转换错误代码

首先,进入程序员模式

选择十六进制并输入100000000个一和八个零

返回Dec并减去错误代码的绝对值,在本例中为536870389

返回Hex查看十六进制错误代码,在本例中为E000020B


我从哪里得到这个错误?我看到可以将int转换为十六进制:0xFFFFFFFFxxxxxxxx,对吗?我会说反之亦然:将它转换为uint,然后看到十六进制值。@Sinatr:不能将int转换为十六进制。十六进制是一种位置数字系统,用于控制值的显示方式。另一方面,int是编程语言C的一种数据类型。该数据类型控制哪些操作可用、存储布局、范围等。该数据类型与人类可读表示中的存储值无关。@IInspectable,我不知道你的意思,但在我的示例中,要看到E000020B而不是-536870389,只需指定X:string.FormatError{0:X}SetupDiChangeState,Marshal即可。GetLastWin32Error@Sinatr:这是从int到string的转换。没有从int到hex的转换。还应该考虑使用格式说明符{ 0:X8}:GetLastError返回一个DWORD,一个无符号的32位整数。我看到可以将int转换为十六进制:0xFFFFFFFFxxxxxxxx,对吗?我会说反之亦然:将它转换为uint,然后看到十六进制值。@Sinatr:不能将int转换为十六进制。十六进制是一种位置数字系统,用于控制值的显示方式。另一方面,int是编程语言C的一种数据类型。该数据类型控制哪些操作可用、存储布局、范围等。该数据类型与人类可读表示中的存储值无关。@IInspectable,我不知道你的意思,但在我的示例中,要看到E000020B而不是-536870389,只需指定X:string.FormatError{0:X}SetupDiChangeState,Marshal即可。GetLastWin32Error@Sinatr:这是从int到string的转换。没有从int到hex的转换。还应该考虑使用格式说明符{ 0:X8}:GetLastError返回一个DWORD,一个未签名的32位整数。unCukKudIn MARSHAL.GETLASTWI32错误是您的朋友UnunCuffKeDuin MalSal.GETLASTWIN 32错误是您的朋友Hehanckes,注意到在@ AlxED回答之后。更简单的是,在那里输入负值作为Dec,点击Hex并在开始处忽略0xffffff部分。令人困惑的部分是封送处理返回int的原因,另一个令人困惑的部分是所有代码都缺少正常的msdn引用。目前,我正在谷歌中通过输入define blabla搜索它们,其中blabla是十六进制错误代码。然后我就知道了一个恒常的名字,比如说,沉默必须被倾听,只有这样我才能找到一些线索来告诉我到底哪里出了问题。在google中输入-536870389是失败的…谢谢,注意到@AlexD-answer之后。更简单的是,在那里输入负值作为Dec,点击Hex并在开始处忽略0xffffff部分。令人困惑的部分是封送处理返回int的原因,另一个令人困惑的部分是所有代码都缺少正常的msdn引用。目前,我正在谷歌中通过输入define blabla搜索它们,其中blabla是十六进制错误代码。然后我就知道了一个恒常的名字,比如说,沉默必须被倾听,只有这样我才能找到一些线索来告诉我到底哪里出了问题。将-536870389输入谷歌是一个失败。。。