0

在尝试确定 .NET 值类型中字段的精确顺序时,我查看了 ILDASM 树视图和 ILDASM“MetaInfo”(即实际的 IL)。数据的两个视图中的字段顺序是相反的。

例如,System.Runtime.InteropServices.FILETIME 的树视图在 dwLowDateTime 之前列出了 dwHighDateTime。(我会发布一张图片,但这里没有足够的声誉点来这样做)。

另一方面,这里是对应的IL,使用View>>MetaInfo>>Show!在 ILDASM 中:

类型定义 #1655 (02000678)

TypDefName: System.Runtime.InteropServices.FILETIME  (02000678)
Flags     : [Public] [SequentialLayout] [Class] [Sealed] [AnsiClass] [BeforeFieldInit]  (00100109)
Extends   : 02000009 [TypeDef] System.ValueType
Field #1 (04001e2e)
-------------------------------------------------------
    Field Name: dwLowDateTime (04001E2E)
    Flags     : [Public]  (00000006)
    CallCnvntn: [FIELD]
    Field type:  I4

Field #2 (04001e2f)
-------------------------------------------------------
    Field Name: dwHighDateTime (04001E2F)
    Flags     : [Public]  (00000006)
    CallCnvntn: [FIELD]
    Field type:  I4

...

哪个是正确的顺序?我认为 IL 是正确的,但需要确认。有谁知道这种差异的原因?

4

1 回答 1

0

看起来 Win32 FILETIME 结构是 little-endian(低位优先)。.net 版本是一个互操作结构,因此用于与本机代码交互,它几乎必须与本机代码兼容。

至于“差异”背后的原因,请注意“dwHighDateTime”按字母顺序排在“dwLowDateTime”之前。

于 2012-06-07T03:57:03.797 回答