微软中国技术中心
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 (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD这是由于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) */