0

.NET値型のフィールドの正確な順序を決定する際に、ILDASMツリービューとILDASM「MetaInfo」(つまり、実際のIL)の両方を調べました。データの2つのビューのフィールドの順序は逆です。

たとえば、System.Runtime.InteropServices.FILETIMEのツリービューには、dwLowDateTimeの前にdwHighDateTimeが一覧表示されます。(私は画像を投稿しますが、そうするのに十分な評判ポイントがここにありません)。

一方、View >> MetaInfo >> Show!を使用した対応するILは次のとおりです。ILDASMで:

TypeDef#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構造体はリトルエンディアンのようです(低い部分が最初です)。.netバージョンは相互運用構造体であるため、ネイティブコードと対話するために作成されているため、ネイティブコードとの互換性がほとんど必要です。

「視差」の理由は、「dwHighDateTime」が「dwLowDateTime」のアルファベット順であることに注意してください。

于 2012-06-07T03:57:03.797 に答える