VC6工程升级为VC2010(1)

来源:互联网 发布:淘宝怎样能排名靠前 编辑:程序博客网 时间:2024/06/06 02:35

入公司来的第二个任务

把两个工程项目从VC6升级为VC2010

第一步,肯定就是用2010打开vc6的项目DSW文件了。然后等着2010转换了。转换完毕,点击生成。


然后就一堆错误了

第一类错误:

error C2440: “static_cast”:   

无法从“void (__thiscall CTrueColorToolBar::* )(NMTOOLBARA *,LRESULT *)”转换为“void (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)”    d:\工作文档\工作记录\第一个月\第2、3周工作内容\code\picker\picker\truecolortoolbar.cpp    42


VS2010和VC6的不同导致,导致消息响应函数的返回值类型不匹配


根据错误提示,直接修改就好了。把NMTOOLBARA改为HMHDR就行了



错误    23    error C2440: “static_cast”: 无法从“void (__thiscall CPicturePropertyPage::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”    d:\工作文档\工作记录\第一个月\第2、3周工作内容\code\picker\picker\picturepropertypage.cpp    94


这种事返回类型不一样造成的,把void 改为LRESULT就可以了。


第二类错误:

for(int i=0;i<xx;i++)

然后下面的所有都是

for(i=0;i<xx;i++)

导致报i没有定义的错误

引发这种错误的原因是:vs2010更符合C++的标准,临时变量的作用域已经修正了,VC6这种写法得修正。

修改方式很简单。。

把定义提前

int i=0;

for(i=0;i<xx;I++);



for(CSubclassWnd* p =   theHookMap.Lookup(m_hWnd);p;p=p->m_pNext)

改为

CSubclassWnd*p=NULL;

for( p =   theHookMap.Lookup(m_hWnd);p;p=p->m_pNext)


第三类错误:

在编译错误都结束后,又出现了一个问题

这种问题,直接在配置里把vc98的库加进库文件中。


第四类错误:

#ifdef _AFXDLL
 Enable3dControls();   // Call this when using MFC in a shared DLL
#else
 Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

这段代码在VS2010中已经不需要再使用了,可能已经隐藏的实现了吧。

第五类错误:

可能出现下面的错误:

我用VS打开VC6建的工程,经常出现这种错误:
错误 1 fatal error CVT1100: 重复的资源。type:MANIFEST, name:1, language:0x0409 CVTRES
错误 2 fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 *****
开源项目中老的Win32工程转到VS2005工程出现的问题
将.RC2文件里的RT_MANIFEST定义注释掉即可 或者
工程属性->配置属性-> 清单工具->输入和输出->嵌入清单,选择[否],即可 或者
双击 Resource Files 下的 xxx.rc 修改 RT_MANIFEST 英语(美国)为 中文(中国)
这些是我从网上搜到的方法 后两个方法我试了 好使 但是第一个.RC2文件中没有看到RT_MANIFEST定义




0 0
原创粉丝点击