3

我正在用 C# 开发一个项目来创建表单应用程序。我想使用 IFileDialog 和其他属于本机 Windows API 的功能(或者应该调用 ti)。

一开始我对互操作或 Windows API 一无所知。我开始学习,但有时很难找到有关某些方面的非常基本的信息。因此,我有一个(可能是微不足道/愚蠢的)问题:

HResults 经常被使用。据我了解,HResults 只不过是一个 32 位实体,其中不同的位提供有关某些操作结果的信息。在我在网上找到的一些代码中,我经常看到类似int hres = -2147467259;. 作为一个完全的菜鸟,我去检查这意味着什么。-21474672590xFFFFFFFF80004005并且在 MSDN 的在线文档中,我可以看到这0x80004005表示E_FAIL又名未指定的错误。我的问题是,这FFFFFFFF部分是怎么回事?他们就不能用int hres = 0x80004005吗?也许这很明显,我完全是菜鸟,但仍然:)

4

2 回答 2

2

FFFFFFFF 部分是因为您的 HResult 是否定的。

这就是计算机使用二进制补码存储负数的方式。

看看这个计算(我的重点):-
2147467259 = 0xFFFFFFFF 80004005
-2147467259 + 2^32(翻转)= 2147500037 = 0x 80004005

于 2009-11-01T20:27:10.543 回答
0

在 32 位平台上,anint是 32 位长,即 8 个十六进制数字的 4 个字节。就是E_FAIL这样 0x80004005,(这是您粘贴的代码所显示的内容。如果您将此值转储到 64 位机器上,那么它将占用两倍的存储空间,并且由于数字是符号扩展的,并且前导 8(二进制100)表示符号bit is 1then it's all the way. 1111in binary is Fin hex 它带来了F你看到的所有 s。

于 2009-11-01T20:48:27.787 回答