xmlpull 发表于 2012-5-11 18:02:04

Win64 结构体定义的一个问题。~ ~




这个是 Win 7 x64 _MMPTE_HARDWARE 结构。

可是当自己定义的时候。typedef struct _MMPTE_HARDWARE {
        unsigned Valid :                                1;
        unsigned Dirty1 :                                1;
        unsigned Owner :                                1;
        unsigned WriteThrough :                        1;
        unsigned CacheDisable :                        1;
        unsigned Accessed :                                1;
        unsigned Dirty :                                1;
        unsigned LargePage :                        1;
        unsigned Global :                                1;
        unsigned CopyOnWrite :                        1;
        unsigned Unused :                                1;
        unsigned Write :                                1;      
        unsigned PageFrameNumber :                  36;
        unsigned reserved1 :                        4;
        unsigned SoftwareWsIndex :                        11;
        unsigned NoExecute :                        1;
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;编译器 提示: 'PageFrameNumber' : type of bit field too small for number of bits。
意思 大概就是太大了。

如果我把 PageFrameNumber 类型改成 ULONG64 之类的64位类型。 编译是通过了。但是并不符合要求。

如图。


What Should I Do.?

Tesla.Angela 发表于 2012-5-11 20:13:24

MMPTE_HARDWARE不就是一个ULONG64嘛

xmlpull 发表于 2012-5-11 20:24:18

Tesla.Angela 发表于 2012-5-11 20:13 static/image/common/back.gif
MMPTE_HARDWARE不就是一个ULONG64嘛

MMPTE_HARDWARE 的确是个ULONG64。

-。- 可是怎么改野。

xmlpull 发表于 2012-5-11 21:20:51

{:soso_e119:}解决了。要这样才行。

#pragma pack(push,1)
typedef struct _NEWMMPTE_HARDWARE {

                ULONG_PTR Valid :                                        1;
                ULONG_PTR Dirty1 :                                        1;
                ULONG_PTR Owner :                                        1;
                ULONG_PTR WriteThrough :                        1;
                ULONG_PTR CacheDisable :                        1;
                ULONG_PTR Accessed :                                1;
                ULONG_PTR Dirty :                                        1;
                ULONG_PTR LargePage :                                1;
                ULONG_PTR Global :                                        1;
                ULONG_PTR CopyOnWrite :                                1;
                ULONG_PTR Unused :                                        1;
                ULONG_PTR Write :                                        1;   
                               
                ULONG_PTR PageFrameNumber :                        36;

        ULONG_PTR reserved1 :                                4;

        ULONG_PTR SoftwareWsIndex :                        11;
        ULONG_PTR NoExecute :                                1;


} NEWMMPTE_HARDWARE, *NEWPMMPTE_HARDWARE;
#pragma pack(pop)

马大哈 发表于 2012-5-12 11:44:18

{:soso_e136:}

kk1025 发表于 2013-4-18 12:19:06

xmlpull 发表于 2012-5-11 21:20 static/image/common/back.gif
解决了。要这样才行。

#pragma pack(push,1)


原來如此
页: [1]
查看完整版本: Win64 结构体定义的一个问题。~ ~