微软中国技术中心
Richard Zhang
2006.6
MSDN 中文网中有一篇文章叫"循序渐进从Embedded Visual C++移植到Visual Studio 2005",里面介绍的方法是新建一个MFC工程,然后把早先的MFC Source File添加到你的工程中,这种方法略为麻烦,下面介绍一个比较简单的方式进行移植。
在Windows Mobile 5.0里,由于基于效率考虑,早先的一些MFC Class不再支持,所以会带来一些编译上的麻烦,如CCeCommandBar等等,所以要先进行一些移植工作。
通常情况下,EVC的Project Settings和Visual Studio 2005里的默认Settings是不一样的,通常我
们首先遇到的错误信息是这样的:
fatal error C1189: #error : Building MFC application with /MD
![Drinks](https://i-blog.csdnimg.cn/blog_migrate/7e14e06906d9d51e8597f8c0707646d1.png)
![Drinks](https://i-blog.csdnimg.cn/blog_migrate/7e14e06906d9d51e8597f8c0707646d1.png)
这是由于VS2005默认的MFC程序是使用动态MFC库(Use MFC in a Shared DLL)来链接的而动态MFC库使用的是Multi-threaded DLL (/MD),由于XP对于PE文件格式监测更加严格,所以要进行如下的项目设置修改:
[Project Properties] -->[Configuration Properties] --> [c/c++] -->[Code Generation]-->[RunTime Library]这里要改成[Multi-threaded (/MT)]
再编译,通过了,但出现了一个Link错误:
corelibc.lib(wwinmain.obj) : error LNK2019: unresolved external symbol wWinMain referenced in function wWinMainCRTStartup
现在要做如下修改,因为程序默认Entry Point找不到了,重新打开项目设置:
[Project Properties] -->[Configuration Properties] --> [Linker]-->[Advanced]-->[Entry Point]-->把[wWinMainCRTStartup]改成[WinMainCRTStartup]
再编译,通过了。另外,Visual Studio2005总会提示你例如WINVER没定义等等,但会有一个Default值,不影响编译,还有就是会有提示过期的警告信息,如果太多的话可以加上如下的编译控制模块加以屏蔽:
#if (_MSC_VER >= 1400) /* VC8+ (VS2005) */
#pragma warning(disable : 4996) /* Disable all deprecation warnings */
#endif /* VC8+ (VS2005) */