找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5726|回复: 5

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

  [复制链接]

9

主题

117

回帖

0

精华

银牌会员

积分
422
发表于 2012-5-11 18:02:04 | 显示全部楼层 |阅读模式

QQ截图20120511175550.png


这个是 Win 7 x64 _MMPTE_HARDWARE 结构。

可是当自己定义的时候。
  1. typedef struct _MMPTE_HARDWARE {
  2.         unsigned Valid :                                1;
  3.         unsigned Dirty1 :                                1;
  4.         unsigned Owner :                                1;
  5.         unsigned WriteThrough :                        1;
  6.         unsigned CacheDisable :                        1;
  7.         unsigned Accessed :                                1;
  8.         unsigned Dirty :                                1;
  9.         unsigned LargePage :                        1;
  10.         unsigned Global :                                1;
  11.         unsigned CopyOnWrite :                        1;
  12.         unsigned Unused :                                1;  
  13.         unsigned Write :                                1;      
  14.         unsigned PageFrameNumber :                  36;
  15.         unsigned reserved1 :                        4;
  16.         unsigned SoftwareWsIndex :                        11;
  17.         unsigned NoExecute :                        1;
  18. } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
复制代码
编译器 提示: 'PageFrameNumber' : type of bit field too small for number of bits。
意思 大概就是太大了。

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

如图。
未命名.jpg


What Should I Do.?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2012-5-11 20:13:24 | 显示全部楼层
MMPTE_HARDWARE不就是一个ULONG64嘛

9

主题

117

回帖

0

精华

银牌会员

积分
422
 楼主| 发表于 2012-5-11 20:24:18 | 显示全部楼层
Tesla.Angela 发表于 2012-5-11 20:13
MMPTE_HARDWARE不就是一个ULONG64嘛

MMPTE_HARDWARE 的确是个ULONG64。

-。- 可是怎么改野。

9

主题

117

回帖

0

精华

银牌会员

积分
422
 楼主| 发表于 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)

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2012-5-12 11:44:18 | 显示全部楼层
{:soso_e136:}
我就是嗷嗷叫的老马了......

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-18 12:19:06 | 显示全部楼层
xmlpull 发表于 2012-5-11 21:20
解决了。要这样才行。

#pragma pack(push,1)

原來如此
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表