vs2008打开dsw损坏_VC++6.0转到VS2008常出现的错误及解决方案

刚从VC++6.0转到VS2008,用着好不习惯,网上找到一帖子,转给大家,希望会有帮助。

--------------------------------------------------------------------------------------------------

首先在此引一例子

当源文件由vc++6.0转到vs2008时会出现如下错误:

错误一:error C2039: 'WriteHuge' : is not a member of 'CFile'"

解决方案:只有VC6有函数WriteHuge,VC7以上就没有了。用Write替换WriteHuge就可以解决问题。

1.MessageBox()

VC++6.0:MessageBox("Hello,World!");

VS2008:MessageBox(L"Hello,World!"); 或 MessageBox(TEXT("Hello,World!"));

2.Combo box内容添加方法

VC++6.0:Drop-Down List Box Control 的 Properties 中的 Data 用 Ctrl-Enter 输入

VS2008:更名为 Combo-Box Control ,并在右侧 Data 区域用 semicolons(即';')分隔输入

3.从.net开始就没有classwizard了,全部在属性窗口里了

属性窗口中有,闪电图标及右边的都是,包括事件,消息,虚函数重载,加入变量则是在类标上右击->添加变量……

4.消息映射

VS2005对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2005下编译不通过

a,ON_MESSAGE(message,OnMyMessage);

OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);

如果不符合,则有错误提示:

error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”

error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”

b,在VS2005中,OnMyMessage返回值必须为BOOL,且含有一个 UINT 参数指出了命令ID,其形式为:afx_msg BOOL OnMyMessage(UINT);如果不符合,则有错误提示.

如在VS6中,OnMyMessage2的定义为afx_msg BOOL OnViewZoomBar()时亦可正常编译通过,但在VS2005下,有错误提示:

error C2440: “static_cast”: 无法从“BOOL (__thiscall CMainFrame::* )(void)”转换为“BOOL (__thiscall CCmdTarget::* )(UINT)”

error C2440: “static_cast”: 无法从“BOOL (__thiscall CMainFrame::* )(void)”转换为“BOOL (__thiscall CCmdTarget::* )(UINT)”

5.字符处理

在c中广泛使用的strcpy,strcat,strstr等等推荐使用更为安全strcpy_s,strcat_s,strstr_s等来代替.

6.数学函数检查

VS2005中,数学函数的参数检查更为严格,如pow(2, 45)会引起一个错误提示如下:

error C2668: “pow”: 对重载函数的调用不明确

d:program filesmicrosoft visual studio 8vcincludemath.h(575): 可能是“long double pow(long double,int)”

d:program filesmicrosoft visual studio 8vcincludemath.h(527): 或“float pow(float,int)”

d:program filesmicrosoft visual studio 8vcincludemath.h(489): 或“double pow(double,int)”

试图匹配参数列表“(int, int)”时

正确的使用为pow(2.0, 45)

7.更加符合C++标准

如在VS6中,在FOR循环中的循环变量的定义的作用域延伸到循环体外,VS2005则修正了这样的bug。

VC6:

for(int i=0;i<100;i++)f2();

for(i = 1;i<10;i++)f1();    //i已经定义

而有VS2005中,第二句的i必须重新定义

--------------------------------------------------------------------------------------------------------------------------------------------

直接用Visual Studio 2008的打开VC6的工作区文件和项目文件(dsw和dsp),并将其升级为VS2008的解决方案格式和项目格式(sln和vcproj),VC9的编译器相对于VC6有了很大的变化,一些编译参数和链接参数被废弃(比如/map:line),有一些改变了名称,还有新增的选项,不过不用担心,升级过程会自动对其进行转换,最终都会得到一个正确的解决方案和VC项目文件,这个过程不会遇到太多的麻烦,问题都出在随后的编译过程中,下面就将我在移植的过程中遇到的问题和我的解决方法总结一下,希望对还在用VC6维护代码的朋友有所帮助。

一、_WIN32_WINNT 与 _WIN32_IE 设置冲突

_WIN32_WINNT 与 _WIN32_IE设置不兼容会导致如下错误:

错误一:C1189致命错误:StdAfx.cpp

c:program filesmicrosoft sdkswindowsv6.0aincludesdkddkver.h(217) : fatal error C1189: #error :  _WIN32_WINNT settings conflicts with _WIN32_I

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值