使用指针的规则

使你的代码既能在32位windows也能在64位windows环境下运行是极度向往的。你需要尊从一些简单的规则,例如转换指针,以及在你的代码中使用新的数据类型。关于指针的维护规则如下所示。

1、不要将指针强制转换为int, long, ULONG或DWORD
如果你必须将指针强制转换以测试一些位,设置或清除一些位,或者维护它的内容,请使用UINT_PTR或INT_PTR类型。这些类型是内部类型,已经将指针的尺寸缩放到32和64位windows(例如, ULONG被用于32位windows,而_int64被用于64位Windows)。例如,假设你是这样写代码的:

ImageBase = (PVOID)((ULONG)ImageBase | 1);

作为对指针的处理,你要将代码改成如下所示:

ImageBase = (PVOID)((ULONG_PTR)ImageBase | 1);

合适的时候(如果你并不能确定到底哪儿需要它们,使用了也没什么坏处),要使用UINT_PTR和INT_PTR。不要将你的指针转换为ULONG,LONG, INT, UINT或DWORD

注意HANDLE被定义为void*, 那么将该类型转换为ULONG值,来测试、设置或清除低序2个位的时候,在64位Windows上是错误的。

2、使用PtrToLong和PtrToUlong来转换指针

3、小心使用OUT参数

4、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值