Мне нужно написать код в Windows 7 (64 бита), который выполняет 32-битную программу с интерфейсом общей памяти (SMI). Точнее, программа, которую я кодирую, записывает в SMI, а 32-битная программа читает из этого SMI.
Первая проблема, с которой я столкнулся, заключается в том, что у меня нет доступа к исходному коду 32-битной программы, проблема, которая не может быть решена. Вторая проблема заключается в том, что SMI хранит адрес записанной информации. Этот указатель сохраняется в виде указателя на основе, используя следующий код:
gpSharedBlock->m_pData[uiDataPointer] = (char __based(gpSharedBlock)*)pData;
Если pData - это указатель на данные, которые мы пишем, а gpSharedBlock-> m_pData [i] указывает на сохраненный i-й элемент.
Вероятно, отсюда вы уже заметили проблему; указатель в W32 составляет 4 байта, а указатель в W64 составляет 8 байтов. Затем, поскольку сохраненное значение является 64-битным указателем, значение, окончательно считанное 32-битной программой, не является желаемым.
У меня вопрос: есть ли способ сделать преобразование 64-разрядного адреса в 32-разрядный адрес так, чтобы запущенная программа считала правильную информацию?
Я читал о WOW64 и полагаю, что под ним работает программа W32, но я не знаю, как этим воспользоваться. Есть идеи?