这是我的问题。我按照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;部分是正确的。
提前致谢。
答案 0 :(得分:1)
文档是正确的 - 指针仅在原始进程中有效,因为指针是相对于进程的内存空间进行解释的。因此,您无法在进程之间传递指针并取消引用它。您必须序列化(深层复制)实际数据并将其传输到其他进程。
例外情况是您可以在Windows上的进程之间设置特定的“共享内存”空间。尽管如此,虽然指针值本身并不保证是相同的。
答案 1 :(得分:0)
每个进程都拥有自己的虚拟内存地址空间。如果跨越流程边界传递指针,则它们在目标流程中具有完全不同的含义。