指针 – __ptr32和__ptr64有什么意义?


this MSDN article中所述,Microsoft有两种类型注释来声明不同体系结构上的本机指针.但是,在第二行:

On a 32-bit system, a pointer declared with __ptr64 is truncated to a 32-bit pointer. On a 64-bit system, a pointer declared with __ptr32 is coerced to a 64-bit pointer.

这听起来像声明无关紧要;如果架构覆盖__ptrXX的声明是默认的,那么首先标记__ptrXX有什么意义呢?

我看到this answer说它是用于互操作,但如果声明基本上被覆盖如上,那对于互操作有什么帮助?

最佳答案 声明和分配32位指针并实际使用它之间有很大的区别.换句话说,取消引用指针.如果您在64位进程中执行此操作,则除了将其签名扩展为64位指针之外没有其他选项.这是“强迫”的意思.这可能是偶然的,但你必须非常幸运.尝试没有意义.

声明__ptr32的重点与链接的答案中描述的一样,只有在与32位进程互操作时才有意义.其中使用32位指针.这并不常见.

点赞