最近,接到一个任务要将一个软件改写为支持中方版本的。其实思路很简单,只要将工程文件从ANSI版本改为UNICODE版就可以了。不过在改写的过程中还是遇到一些个小问题,现把整个过程记录下来,以便以后再遇到方便,同时,如果其它朋友也遇到同样的问题,也好解决,不用再一个个的找原因了。
1.首先,打开工程->重新编译。
确保原工程编译通过。
2.然后依次打开 project->setting ->c/c++ ->preprocessor definitions 下添加 _UNICODE
再编译,试试,看出现什么问题:)
编译到下面这行时出现:error C2002: invalid wide-character constant
- AddSpecChar(_T("•"), _T("/x95/0"));
解决方法:将_T("/x95/0")改为_T("/0x95")
3.再重新编译
出现error LNK2001: unresolved external symbol _WinMain@16的问题
解决方法:引用“风影海翼”的博客中的解决方案 http://blog.chinaunix.net/u1/54017/showart_489195.html提到的第三个解决方案。
解决外部符号错误:_main,_WinMain@16,__beginthreadex 1. Windows子系统设置错误, 提示: [Project] --> [Settings] --> 选择"Link"属性页, 2. Console子系统设置错误, 提示: [Project] --> [Settings] --> 选择"Link"属性页, 3. 程序入口设置错误, 提示: [Project] --> [Settings] --> 选择"Link"属性页, 在Category中选择Output, 再在Entry-point symbol中填入wWinMainCRTStartup, 即可 这是因为MFC要使用多线程时库, 需要更改设置: [Project] --> [Settings] --> 选择"C/C++"属性页, 在Category中选择Code Generation,再在Use run-time library中选择Debug Multithreaded或者multithreaded 其中, |
4.再编译,出现:
warning C4706: assignment within conditional expression的警告。
解决方法:设置project->setting ->c/c++ warning level改为level 3
5.再编译出现 fatal error LNK1104: cannot open file "mfc42ud.lib" 错误,可以下载相应的lib和dll文件。
我已经打包在http://download.csdn.net/source/844677可以下载到,包括最后调试时要用到的UAFXCWD.PDB文件
http://www.fdigg.net/sitelist.aspx?id=8A5A0A700A7500BF&dir=0030190722470F1621A2F99303BBFEBB可以下到整个vc6.0的文件
6.最后编译,谢天谢地 - 0 error(s), 0 warning(s) 大功告成!