【发布时间】:2012-01-21 15:53:36
【问题描述】:
我需要在 Windows 7(64 位)中编写代码,以执行具有共享内存接口 (SMI) 的 32 位程序。更准确地说,我正在编写的程序写入 SMI,而 32 位程序则从该 SMI 中读取。
我遇到的第一个问题是我无法访问 32 位程序的源代码,这个问题无法解决。第二个问题是 SMI 存储了写入信息的地址。使用以下代码将此指向的指针存储为基于指针:
gpSharedBlock->m_pData[uiDataPointer] = (char __based(gpSharedBlock)*)pData;
如果 pData 是指向我们正在写入的数据的指针,而 gpSharedBlock->m_pData[i] 指向存储的第 i^th 个元素。
可能从这里你已经注意到了这个问题; W32 中的指针为 4 字节,而 W64 中的指针为 8 字节。那么,由于存储的值是一个64位的指针,所以32位程序最终读取的值并不是我们想要的。
我的问题是:有没有办法将 64 位地址转换为 32 位地址,以便正在运行的程序读取正确的信息?
我已经阅读了 WOW64,并且我认为 W32 程序正在其下运行,但我不知道如何利用它。有什么想法吗?
【问题讨论】:
标签: c++ pointers 32bit-64bit