使用指针的规则

博客介绍了让代码在32位和64位Windows环境下运行需遵循的规则,如不要将指针强制转换为int、long等类型,可使用UINT_PTR或INT_PTR类型;使用PtrToLong和PtrToUlong来转换指针;还要小心使用OUT参数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使你的代码既能在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、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值