入公司来的第二个任务
把两个工程项目从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定义