Hi Fred!
> On my Visual Studio 2003 Enterprise running on XP PRO SP2, putting
> "#include <afx.h>" before "#include <windows.h>" results in about dozen
> warnings and errors. Reversing the order results in only one error in
> afxv_w32.h which is generated by the following lines of code:
It is also enoght to only include "afx.h". You do not need to include
"windows.h", because it is already included by "afx.h".
> Also you mentioned ANSI/UNICODE builds, where is this set?
Right-Click on the project, select "Properties".
In the "General" section you see an entry called "Character Set". Here
you can select "Not Set", "Multi-Byte", "Unicode"
> I am an experienced programmer, but new to .net.
Unicode is not new... this option was available at least since VC5 (or
NT 3.1).
> Most of our applications are evolutions of existing apps rather than new
> application from scratch. I suspect most companies who have a large
[quoted text clipped - 5 lines]
> probably retire converting one of our major apps, some of which took
> more than a year to write.
From my expirience, a reasonable upgrade is only if you use your
existing code via P/Invoke / COM-Interop and (re)write new/old parts in
C# (for example UI).
> I had fewer problems converting these program to Linux using a free
> compiler! It's just a char* so why all the grief.
That might be true. But you do not have all the advantages of .NET (like
reflection, which is really a bit plus!).
And you also need to reqrite your UI. Therefor I recommend to rewrite
the UI in C#.

Signature
Greetings
Jochen
My blog about Win32 and .NET
http://blog.kalmbachnet.de/