32位指针在64位进程中是否有效?

时间:2014-07-30 22:08:20

标签: 64-bit 32bit-64bit

这是我的问题。我按照link

实现了一个与x32进程通信的Win 7 x64进程

x64进程检索x32指针(下面的p_x32)到myClass:

myClass * POINTER_32 p = (myClass * POINTER_32)p_x32;

麻烦的是在' p'上调用方法。因内存违规而崩溃。实际上,在VS调试器下我可以看到' p'成员不合规,即价值观是虚假的。进一步挖掘我发现了link

作者说:"句柄或指针无法序列化,它只在创建它的过程中有效"。如上所述,显然指针可以被序列化(我使用INT_PTR),但我想知道它是否只在创建它的过程中有效#34;部分是正确的。

提前致谢。

2 个答案:

答案 0 :(得分:1)

文档是正确的 - 指针仅在原始进程中有效,因为指针是相对于进程的内存空间进行解释的。因此,您无法在进程之间传递指针并取消引用它。您必须序列化(深层复制)实际数据并将其传输到其他进程。

例外情况是您可以在Windows上的进程之间设置特定的“共享内存”空间。尽管如此,虽然指针值本身并不保证是相同的。

答案 1 :(得分:0)

每个进程都拥有自己的虚拟内存地址空间。如果跨越流程边界传递指针,则它们在目标流程中具有完全不同的含义。