I've found the best way to flush out bugs is to audit your code for any code that does any of the following and to fix it in the 32 bit world, then start the port.
- Uses untyped containers and casts rather than the correct container.
- Uses casts to store pointers in DWORDs for whatever reason, typically as an eventual prelude to storing in a container
- casting when archiving
For cases when you really do have to do the DWORD/ptr thing change the type to DWORD_PTR.
I've seen plenty of code using a CStringToPtr rather than a CMap<> with the appropriate types.
All of these things will probably compile on 64 bit (with no warnings because of the cast) and then fall flat on their face. If they used the correct types and no casts the code would work first time.
Also check for any subclassing code that sets the WndProc - you need a different flag to set this on 64 bit Windows.
If using MFC you will also (unhelpfully) find that the container sizes now return 64 bit size counts rather than 32 bit size counts, which means your 32bit/64bit archiving will be broken. You'll have to tackle this as you go. We created our own custom MFC implementation with some clever tricks to allow us to de-serialize 32 bit archives on 64 bit boxes and vice versa.