【发布时间】:2013-01-14 11:13:40
【问题描述】:
我正在尝试使用 MSVC 64 位编译器解决以下代码的逻辑错误。
这段代码之前在 32 台机器上运行良好。
return ((ULONG) DupThreadHandle);
在 64 位世界中,我了解到任何线程句柄都是 64 位(实际上是 6 字节),所以这段代码显然是错误的,因为目标类型是 ULONG,即 32 位。
但是 msdn 建议使用我在标题中提到的帮助函数,通过包含 basetsd.h 来为 C 代码进行 64 位移植
但我的问题是,这些辅助函数如何在概念上将 6 字节地址更改为 4 字节地址?因为已经将线程放置在某个 6 字节地址。这个 4 字节地址有多大意义? 我不想更改目的地类型。因为问题将是递归警告。
【问题讨论】:
-
在同一行中,我可以概括这个问题,ptr64toptr() 和 ptrtouint() 如何在 64 位世界中工作?因为如果这个辅助函数提供 32 位值,我需要了解这个 32 位值是如何引用 64 位值的,如果我尝试取消引用这样的 32 位指针?谢谢
标签: c 64-bit 32bit-64bit