DSP

VC7到VC6工程的转换工具(转)

2019-07-13 16:40发布

下载工程转换工具
下载源代码



一、简介

这个工具自动将VC7工程转换回VC6工程,换言之,就是将.sln/.vcproj这两个文件转换到.dsw/.dsp文件。
注意:本转换器在转换期间只是建立(或覆盖).dsw/.dsp文件,并没有改变任何源代码。

二、由来
首先当然是MS并没有提供这样的工具,MS在出售开发工具时并没有提供工程回退的转换功能使你感到很伤脑筋,甚至开始憎恨MS。
没有这样的工具,虽然你可以通过重建工程来凑合,但浪费时间并容易带来错误。事实上,在如下情形时这个工具是很有用的:
  • 有人给你VC7工程,但你只安装了VC6
  • 你将工程从VC6升级到VC7,在你的目录下同时存在.dsw/.dsp和.sln/.vcproj文件,并且你希望保持这几个文件的同步,使你在不需要使用两个版本VC++的情况下任何时候都可以打开这个工程开始工作。
  • 提供两个版本的工程(例如你在CodeProject中共享你的代码时),而不用担心读者使用的是哪个版本的开发工具。
三、如何使用
命令行形式:prjconverter [.sln]例如:prjconverter c:/tmp/betterxml/betterxml.sln可以在命令行键入prjconverter.exe获取更多信息

四、转换了什么
简单的几步就可以清楚这是如何工作的,打开.sln解决方案文件并转换到.dsw文件格式,包括所有的工程定义,依存信息和源代码控制标记。

然后,所有.vcproj工程文件转换为.dsp文件,我使用MSXML来解析.vcproj文件格式,另外创建元模型( meta-model),然后将所有XML内容转换到标准的.dsp符号行。

当然,我们要小心处理项目中的配置(debug,release,...),还有自定义的配置。

五、技术细节
代码中slnprocess.cpp完成从.sln到.dsw的转换。vcprojprocess.cpp完成从.vcproj到.dsp的转换。
vcprojconfiguration.cpp包含了所有工程元模型(meta-model)(即所有工程设置选项)。在VC7中元模型是可编程的。具体可以查看此链接http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcext/html/vcoriVisualCExtensibilityObjectModel.asp ,事实上vcprojconfiguration.cpp就是展现了这种元模型(meta-model,就像MS的内部代码)

六、申明
这个工具在发布之前已经经过广泛的测试(MFC/COM/ATL/控制台程序,make文件,...),虽然我希望知道是否有可以改进的地方,但我必须清楚地申明如果你的工程被该工具破坏并不是我的错。