也谈EVC工程移植

也谈EVC工程移植
2011年07月05日
  [b]也谈EVC工程移植[/b]
  本文是针对作者本人的一个具体的移植项目,将碰到的所有问题列出来,并给出具体的解决方法。由于是一个具体的项目,因此不能把所有的EVC工程移植问题囊括进来。所以,在移植项目前,建议还是看看以下的文章:
  循序渐进:将 eMbedded Visual C++ 应用程序迁移到 Visual Studio 2005
  eMbedded Visual C++ 到 Visual Studio 2005 升级向导(注意其最后一句话:默认情况下,Embedded Visual C++ 4.0 版会将 MFC Pocket PC 应用程序的对话框样式(Border)设置为 DS_MODALFRAME。MFC 8.0 不支持此样式。 ―― 应改为Thin,如果不改的话,窗口就无法弹出。)
  从 eVC 移植所带来的已知问题
  Migrating Microsoft eMbedded Visual C++ Projects to Visual Studio 2005
  开发环境:Windows XP +SP2, Visual Studio 2005 professional, Windows Mobile 6.0 Professional SDK。
  注:(1)对于Windows Mobile 5.0 SDK 开发的程序在Windows Mobile 6.0 下也能运行,而且不需要对程序进行任何的修改。
  (2)由于有些错误,是环境配置问题,所以在Debug/Resease模式下,都需要进行修改,以下错误中,如果是这类错误,都在标号后面写着“Resealse 模式也需要改”,当天切换到别的SDK下,如Windows Mobile 5.0 SDK,也需要修改。
  以下是针对Debug模式下的:
  1、StdAfx.cpp (Resealse 模式也需要改)
  编译错误:D:\Program Files\Microsoft Visual Studio 8\VC\ce\atlmfc\include\afxver_.h(77) : fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
  解决方法:右击工程名,打开Project properties对话框,切换到C/C++->Code generation页,将Runtime Libarary 设置成“Multi-threaded DLL(/MD)”,即可解决此问题。
  2、编译错误:error C2065: ''i'' : undeclared identifier
  原因:是由于存在以下的代码段:
  for (int i = 0; i Windows Mobile 5.0/6.0 下CCeCommandBar类被CCommandBar替换
  解决方法:
  CCeCommandBar m_wndCommandBar; ---- 〉CCommandBar m_wndCommandBar;
  6、error C2065: ''NUM_TOOL_TIPS'' : undeclared identifier
  解决:
  //#if defined(_WIN32_WCE_PSPC) && (_WIN32_WCE >= 212)
  #define NUM_TOOL_TIPS 8
  //#endif
  7、error C3861: ''ON_WM_HELPINFO'': identifier not found
  同 4
  8、error C2440: ''static_cast'' : cannot convert from ''void (__cdecl CMyAppView::* )(void)'' to ''LRESULT (__cdecl CWnd::* )(WPARAM,LPARAM)''None of the functions with this name in scope match the target type
  解决方法:
  afx_msg void OnHotLinkExplain(); --- 〉
  afx_msg LRESULT OnHotLinkExplain(WPARAM wParam,LPARAM lParam);
  9、error C2664: ''CSize CDC::GetTextExtent(LPCTSTR,int) const'' : cannot convert parameter 1 from ''WORD *'' to ''LPCTSTR''
  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast需要强制转换
  pDC->GetTextExtent(&i, 1).cx); ――>
  pDC->GetTextExtent((LPCTSTR)&i, 1).cx;
  10、error C2039: ''OnHelpInfo'' : is not a member of ''CView''
  error C2039: ''OnHelpInfo'' : is not a member of ''CFrameWnd''
  error C2039: ''OnHelpInfo'' : is not a member of ''CDialog''
  解决方法:用TRUE替换相应的类成员函数OnHelpInfo''
  return CView::OnHelpInfo(pHelpInfo); ――> return TRUE;
  11、error C2039: ''m_bShowSharedNewButton'' : is not a member of ''CCommandBar''
  D:\Program Files\Microsoft Visual Studio 8\VC\ce\atlmfc\include\afxext.h(557) : see declaration of ''CCommandBar''
  解决方法:
  直接注释掉 m_wndCommandBar.m_bShowSharedNewButton = FALSE;
  12、.\MyApp.rc(380) : fatal error RC1015: cannot open include file ''wceres.rc''.
  解决方法:
  直接注释掉:#include "wceres.rc" // WCE-specific components
  但是,这个错误很讨厌,每次你修改资源文件后,都得修改该语句,不知道为什么。
  13、Resease 模式下也要修改
  error LNK2019: unresolved external symbol SHInitExtraControls referenced in function "protected: __cdecl CMyAppView::CMyAppView(void)" ([ft=#9f8535,,)
  问题:程序中调用了SHInitExtraControls();
  error LNK2019: unresolved external symbol SHSipPreference referenced in function "protected: void __cdecl CMyAppView::OnKillfocusWord(void)" ([ft=#9f8535,,)
  问题:程序中调用了SHSipPreference
  以上两个函数都在:Library: aygshell.lib里
  解决方法:
  工程-->属性-->Linker -->input -- > Additional Denpendencies :aygshell.lib
  14、Resease 模式下也要修改
  orelibc.lib(wwinmain.obj) : error LNK2019: unresolved external symbol wWinMain referenced in function wWinMainCRTStartup
  属性―〉Linker―〉Anvanced―〉EntryPoint
  将 wWinMainCRTStartup 更改为 WinMainCRTStartup
  Entry Point是WinMainCRTStartup(ANSI)或wWinMainCRTStartup(UINCODE),即: ... WinMainCRTStartup 或wWinMainCRTStartup 会调用WinMain 或wWinMain。
  15、 error C3861: ''LoadStdProfileSettings'': identifier not found
  注释掉函数 LoadStdProfileSettings;
  该函数的具体功能,看MSDN。
  BTW:编译的时候,有可能会出现一些由以上错误产生的连锁错误,俗称“蝴蝶效应”,如error C2143: syntax error : missing ''' before ''}''
  error C2143: syntax error : missing ''' before '',''
  error C2143: syntax error : missing ''' before ''{''
  少了了''{''、''}''、'''等等,把以上的错误―主要矛盾解决了,这些错误―错误矛盾也就迎刃而解了。何况,这个工程是以前在EVC IDE下编译通过,MS再怎么优化或改进编译器,也总不可能发生自相矛盾的事情吧,总要考虑兼容性吧,要对自己或公司的前辈有信心!
  到此,已经能够编译通过,但是运行的时候,又出现如下的问题:
  16、Resease 模式下也要修改
  按F5,出现如下的对话框:
  
  
  
  解决方法:
  右击工程的属性―〉General―〉Project Defaults
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值