天天看点

关于几个如何移植Embedded Visual C++ 3.0 / 4.0 MFC程序到VS2005的几个注意点

微软中国技术中心

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

关于几个如何移植Embedded Visual C++ 3.0 / 4.0 MFC程序到VS2005的几个注意点

(CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD

关于几个如何移植Embedded Visual C++ 3.0 / 4.0 MFC程序到VS2005的几个注意点

这是由于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)

#pragma warning(disable : 4996)

#endif

继续阅读