我有一个Win32 API调用,它返回一个带符号的32位整数值(-2147022987)。
在Windows计算器中(在程序员视图中Alt-3
)模式设置为Dec
和Dword
如果我输入值-2147022987然后将模式切换为Word
我得到1909.我是否正确理解1909是Word
中包含的两个DWord
之一的表示?此值是低顺序Dword
还是高顺Dword
?
我如何以编程方式在C#中进行此转换,以便将值与下面定义的枚举类型进行匹配?
public enum LogonError : ushort
{
LogonSuccessful = 0,
PasswordMustChange = 1907,
NoSuchUser = 1317,
LogonFailure = 1326,
AccountRestriction = 1327,
AccountDisabled = 1331,
InvalidLogonHours = 1328,
NoLogonServers = 1311,
InvalidWorkstation = 1329,
AccountLockedOut = 1909,
AccountExpired = 1793,
PasswordExpired = 1330
}
答案 0 :(得分:1)
您可以使用&
(按位AND)运算符,如下所示:
int i = -2147022987;
LogonError err = (LogonError)(i & 0xffff); // 1909
答案 1 :(得分:0)
假设您正在声明外部API调用:
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
您可以使用此功能获取错误代码:
int errorCode = Marshal.GetLastWin32Error();
您可能需要将枚举更改为int
,这仅在使用SetLastError = true