What is this ?
This tool automatically converts Visual C++ 7.0 projects back to Visual
C++ 6.0 projects. In other words, .sln/.vcproj file pairs are
translated to .dsw/.dsp file pairs.
Important note, there is no loss during the conversion: source code is left
unchanged; only .dsw/.dsp are created (or overwritten).
First of all because MS doesn't provide it. It's easy to become cynical
against MS when you feel how bad it is to sell developer tools without all the
necessary "moulinettes" (converters in ugly English) to go backward.
Without this tool, you end up recreating your projects from scratch: a total
waste of time, and prone to errors. Actually there are several scenarios where
this tool is useful:
- Someone gives you a VC++ 7 project, and you only have VC++ 6 installed.
- You have upgraded your project(s) from VC++ 6 to VC++ 7, and you have both
.dsw/.dsp and .sln/.vcproj files on your local
system drive, but you are willing to keep those files synchronized so any time
you need to open the project, you need not bother the VC++ version you work
- Provide both versions of projects (for instance when you share code on
CodeProject), so your audience does not need to bother with knowing which
devtool is required.
How to use it
The tool is a command line of the form:
prjconverter <solutionname (full filepath)>[.sln]
For info, type prjconverter.exe alone in the console.
What is converted
A few steps to let you know how the work gets done. The .sln solution
file is opened and translated to the .dsw file format, along with all
project declarations, dependencies, and source control tags.
Then all .vcproj project files are translated to .dsp files. I
use MSXML to parse the .vcproj file format, and build the meta-model out
of it. Then what's left to do is serialize all those XML thingies into the
standard .dsp symbol lines.
Of course we care about project configurations (debug, release, ...), and
custom file configuration settings.
In the code provided, slnprocess.cpp does the .sln
=>.dsw conversion. vcprojprocess.cpp does the .vcproj
=> .dsp conversion. And vcprojconfiguration.cpp holds the
project meta-model (all project setting tabs). In VC++ 7, the meta-model is now
programmable. Let's check out this link. In fact, vcprojconfiguration.cpp reflects exactly
this meta-model (as if it was internal MS code).
This tool has been extensively tested before being published
(MFC/COM/ATL/console apps, makefiles, ...). Though I am willing to know if there
is anything I can do in order to improve it, let me clearly say that it's not my
fault if your project is corrupted by this tool.
- Sept 27 - code complete
- Oct 2 - now it is possible to convert .vcproj files alone (no need of
a root .sln file): just type the .vcproj full path in the command
- Oct 30 - improvements based on user feedback: added missing default link
libraries, expanded certain macro variables such like
$(IntDir), replaced or removed certain macro variables not
supported by VC6 such like
$(NoInherit), added /GX
(exception handling enabled).
- Nov 13 - bug fixes: filenames with spaces, MFC extension DLL support, custom
precompiled header setting, project setting inheritance.