VS中工程(VC7/VC8/VC9)迁移至VC6.0时应该注意的若干问题

来源:百度文库 编辑:神马文学网 时间:2024/04/29 07:39:05
VS中工程(VC7/VC8/VC9)迁移至VC6.0时应该注意的若干问题2010-05-10 02:27 P.M.

电脑上装了VS2008之后,除开有时候编译工程外,还没好好用来开发MFC的程序。这次课间实习熟悉了下VS的操作界面,基本了解了如何用其做MFC开发。

VS相对VC6.0版本有不少优点,但其缺点也是很明显的。例如

1、编译速度超级慢;

2、使用向导添加成员函数十分麻烦;

3、使用向导添加控件的成员变量十分麻烦,一次只能添加一个;

4、编辑控件属性也略为复杂(这一点可能不太习惯,因为熟悉了VC6.0,对VS的界面感觉陌生)

另外一个非常头疼的问题就是,由于VS对标准C++库支持得比较好(VC6.0的支持比较差),导致很多代码书写规则必须十分严格。

诸如for(int i){} i不能在循环外使用的,这都是小问题。比较麻烦的是对字符串操作。

例如VC6.0对CString变量赋值比较容易str=“Hello world!';,VS中必须为str=_T("Hello World");.

否则会出现const char [5]' to 'LPCTSTR等错误。解决方式见这里!

在使用VC6.0读取文件路径时,通常函数成员是const char *变量,依然可以使用cstring类型的参数。但这一点在VS下是万万不可行的。除开要进行(char*)(LPCTSTR)str的强制转换外,有时候还需要将路径中的“\”替换成“\\”,这无疑带来很多麻烦。

总的感受是,如果不是开发.net,VC不一定比VS差,相反还有不少优势,会更高效、快速!

以下是后来将进行到一半的VS的工程转化成VC6.0工程需要注意的一些问题。

1、转换工程文件,生产工作区文件。

首先下载projectconverter,根据说明,用命令行操作!

2、cannot open file"mfc42ud.lib"

那是由于在VS下使用MFC时候选用了UNICODE编码,而VC6.0的运行库没有此文件,所以发生错误。可以下载同名.lib文件复制到windows/system32文件夹下,或者在VC6.0的Project中设置去掉UNICODE编码模式,使用_MBCS

3、warning CXXX: '_WIN32_WINDOWS' : macro redefinition

解决方式:以VC6生成的stdafx.h替代高版本VC的同名文件。

4、有关BEGIN_MESSAGE_MAP

VC6.0的方式:

BEGIN_MESSAGE_MAP(CImageInfo, CDialog)
//{{AFX_MSG_MAP(CImageInfo)
ON_BN_CLICKED(IDC_RADIO1, OnRadioGray)
ON_BN_CLICKED(IDC_RADIO2, OnRadioColor)
ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeGray)
ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangeRed)
ON_CBN_SELCHANGE(IDC_COMBO3, OnSelchangeGreen)
ON_CBN_SELCHANGE(IDC_COMBO4, OnSelchangeBlue)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

VC高版本的方式:

BEGIN_MESSAGE_MAP(CImageInfoDlg, CDialog)
   ON_CBN_SELCHANGE(IDC_COMBO1, &CImageInfoDlg::OnCbnSelchangeCombo1)
ON_CBN_SELCHANGE(IDC_COMBO2, &CImageInfoDlg::OnCbnSelchangeCombo2)
ON_CBN_SELCHANGE(IDC_COMBO3, &CImageInfoDlg::OnCbnSelchangeCombo3)
ON_CBN_SELCHANGE(IDC_COMBO4, &CImageInfoDlg::OnCbnSelchangeCombo4)
ON_BN_CLICKED(IDC_RADIO1, &CImageInfoDlg::OnBnClickedRadio1)
ON_BN_CLICKED(IDC_RADIO2, &CImageInfoDlg::OnBnClickedRadio2)
END_MESSAGE_MAP()

修改为对应版本的方式即可。

5、有关项目设置

输出路径改为Debug。VC高版本默认为$(SolutionDir)$(ConfigurationName)