Finally, after many days of testing I have made the migration to VS2012 .. phew!! I won't go into all the details, but to highlight a few things that helped a lot in the process,
- I actually updated the code in VC++ 6 rather than in VS2012. To explain I went back to the original code base and tried to compile it in VS2012, recorded all the compilation errors and corrected them in VC++ 6. This allowed me to make small step changes and check that each change worked before moving on to the next. Meant a lot of swapping between compilers but avoided blindly correcting loads of errors and only being able to test when all errors had been corrected (basically if the code stopped working in VC++ 6 I would only have a few changes to debug).
- A lot of the effort was involved in tidying up the istream and ofstream handling - the standard really has changed from what I could get away with in VC++ 6 (even if, as it turned out, I could bring my code up to the standards in VC++ 6)
- NULL is no longer my friend ... there were a lot of instances where NULL checking had to be updated to make proper use of defined boundary checking functions.
- The static code analysis has been useful for cleaning up some untidy code and making things even safer, but it (obviously) doesn't spot everything and I had one memory overflow that somehow worked in VC++ 6 but choked VS2012 (as mentioned by jwezorek)
- In the end it was chasing down the broken class, isolating it from the rest of the code and testing and testing again until the bugs were found.
Many thanks for all the feedback - it really helped.