EVC(Embedded Visual C++)是微软公司推出的针对Windows CE嵌入式系统的应用程序开发工具,目前版本发展到EVC 4.0 SP4,支持到WinCE 5.0版本。
EVC 4.0具有如下特点:
基于不完全统计的以上几点,微软在放弃了EVB(Embedded Visual Basic) 4.0后,决定再放弃EVC的后续版本开发,所有的嵌入式开发将整合到Visual Studio 2005 .NET中,完成历史性的统一。
虽然如此,鉴于现在.NET 2.0平台的如此不完善(连WinCE 5.0还只附带.NET Compact Framework 1.0,没比WinCE 4.2进步多少,在Platform Builder中加入.NET 2.0后系统居然无法启动),使用VS 2005 .NET(主打.NET 2.0)开发程序还是较为困难,只好忍痛放弃VS .NET,投奔到EVC的怀抱。
初学EVC,在反复的尝试之后,总结出一点点心得:
首先,我们新建一个工程,注意在CPUs的选择上,除了把要用的CPU钩选上,别忘了钩选emulator,在本机模拟器(WinCE 5.0,WinCE 4.2)调试时要用到它。
下一步,确定MFC是共享DLL还是静态链接库,如果WinCE的镜像不带MFC,那么这里必须设置成静态的,不过最好还是在Platform Builder把WinCE的镜像中加上MFC这个feature,静态的总是不好,这个设置可以在Project Settings里面改。
然后就一路Next,都完成后,进入了EVC的编辑界面。首先,我们要让程序支持中文。在VC++中,可以直接在向导中选择中文,可是EVC就比较扯淡,只能在这里重新设置一遍。
还有这里,所有的窗体都要设置成Chinese(P.R.C)。
如果程序用到了外部的链接,需要在这里设置,并且要万分注意的是,对于每个编译项目这些设置都是独立的,所以每一个编译平台(例如Debug,Release)都要重新做这些设置(包括语言设置)。
基本设置完成之后,就可以开始像VC++一样编程了。
如果我是从网上下载的程序,在开始向导时没有钩选我用的CPU怎么办呢?
比如这个程序,它只钩选了ARMV4和emulator,于是在WinCE 4.2下的SDK中,有如下四个平台:
但是当我把环境改成WinCE 5.0时,会发现ARMV4的两项没了,这是因为WinCE 5.0只支持ARMV4I。
这样我们就要手动添加ARMV4I到程序编译环境中。在Build的Configurations中选择Add。
然后手动把ARMV4I的Debug和Release都添加进去。
注意在这个Copy settings from中,不要选择Default Configurations,不然会有我也无法解释的错误。
这样,就可以在编译平台中看到新的CPU了。
不过还没完,因为我们是拷贝的别的平台的设置,所以新的平台编译肯定是会有问题的,果然,问题出来了:
--------------------Configuration: PocketLian - Win32 (WCE ARMV4I) Debug--------------------
Compiling resources...
Compiling...
Command line warning D4002 : ignoring unknown option '/Gs8192'
StdAfx.cpp
Compiling...
Command line warning D4002 : ignoring unknown option '/Gs8192'
PocketLian.cpp
PocketLianDlg.cpp
Generating Code...
Linking...
.\ARMV4IDbg\PocketLian.obj : fatal error LNK1112: module machine type 'ARM' conflicts with target machine type 'X86'
Error executing link.exe.PocketLian.exe - 1 error(s), 2 warning(s)
根据错误提示,我们找到设置中的Link,把这个conflict的machine改成ARM。
再次编译,还是有问题:
--------------------Configuration: PocketLian - Win32 (WCE ARMV4I) Debug--------------------
Compiling resources...
Compiling...
Command line warning D4002 : ignoring unknown option '/Gs8192'
StdAfx.cpp
Compiling...
Command line warning D4002 : ignoring unknown option '/Gs8192'
PocketLian.cpp
PocketLianDlg.cpp
Generating Code...
Linking...
MFCCE400d.lib(mfcce400d.dll) : fatal error LNK1112: module machine type 'THUMB' conflicts with target machine type 'ARM'
Error executing link.exe.PocketLian.exe - 1 error(s), 2 warning(s)
有完没完!只好再改一次。
这一次就好了,同样地,你需要把每一个平台的设置都给改了,这个Release就成功了:
--------------------Configuration: PocketLian - Win32 (WCE ARMV4I) Release--------------------
Compiling resources...
Compiling...
Command line warning D4002 : ignoring unknown option '/Gs8192'
StdAfx.cpp
Compiling...
Command line warning D4002 : ignoring unknown option '/Gs8192'
PocketLian.cpp
PocketLianDlg.cpp
Generating Code...
Linking...PocketLian.exe - 0 error(s), 2 warning(s)
Downloading files
这样,别人的劳动果实就可以在自己的板子上跑起来了。