微軟中國技術中心
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)
#pragma warning(disable : 4996)
#endif