Я обнаружил, что лучший способ устранить ошибки - это проверить ваш код на наличие любого кода, который выполняет любое из следующих действий, и исправить его в 32-битном мире, а затем запустить порт.
- Использует нетипизированные контейнеры и броски, а не правильный контейнер.
- Использует приведения для хранения указателей в DWORD по любой причине, обычно в качестве возможной прелюдии к хранению в контейнере
- литье при архивировании
Для случаев, когда вам действительно нужно выполнить команду DWORD / ptr, измените тип на DWORD_PTR.
Я видел много кода, использующего CStringToPtr, а не CMap <> с соответствующими типами.
Все эти вещи, вероятно, будут скомпилированы на 64-битной (без предупреждений из-за приведения), а затем упадут на лицо. Если бы они использовали правильные типы и не приводили приведения, код работал бы в первый раз.
Также проверьте наличие любого кода подкласса, который устанавливает WndProc - вам нужен другой флаг, чтобы установить его в 64-битной Windows.
Если вы используете MFC, вы также (бесполезно) обнаружите, что размеры контейнеров теперь возвращают значения 64-разрядного размера, а не 32-разрядного, что означает, что ваша 32-разрядная / 64-разрядная архивация будет нарушена. Вам придется решать это по ходу дела. Мы создали нашу собственную реализацию MFC с некоторыми хитрыми хитростями, чтобы позволить десериализовать 32-битные архивы в 64-битных блоках и наоборот.