<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Windows Embedded CE 中国研发团队</title><subtitle type="html" /><id>http://blogs.msdn.com/wincechina/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/wincechina/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/wincechina/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-05-09T11:07:00Z</updated><entry><title>如何修改Windows CE的平台类型</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/wincechina/archive/2009/05/10/windows-ce.aspx" /><id>http://blogs.msdn.com/wincechina/archive/2009/05/10/windows-ce.aspx</id><published>2009-05-10T06:18:00Z</published><updated>2009-05-10T06:18:00Z</updated><content type="html">&lt;P&gt;作者：马宁&lt;/P&gt;
&lt;P&gt;在开发Windows CE的应用程序时，经常需要检测平台类型，了解我们的应用程序运行在Pocket PC、Smartphone还是Windows CE上。在这篇文章里，我们介绍如何编写一个应用程序来检测当前运行的平台类型。&lt;/P&gt;
&lt;P&gt;在开发Windows CE的操作系统时，我们会遇到另外一种情况：某些应用程序限制了运行的操作系统平台，比如只允许运行在Pocket PC上。而我们如果想在Windows CE上运行的话，就需要修改操作系统的平台类型。&lt;B&gt;注意：这种情况只能出现在测试时，不应该修改实际产品的平台类型，否则会引起很多安全性的问题。&lt;/B&gt;&lt;/P&gt;
&lt;H3&gt;创建平台检测程序&lt;/H3&gt;
&lt;P&gt;首先，我们需要创建一个应用程序来检测当前的平台类型，我们使用C++和Platform Builder来创建这个程序。如果你熟悉.NET Compact Framework的开发，想开发托管的平台检测程序，请参考：&lt;/P&gt;
&lt;P&gt;如何检测你的应用程序是否运行在模拟器上&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx" mce_href="http://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx"&gt;http://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;检测你的程序运行在Pocket PC或Smartphone上&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/netcfteam/archive/2006/09/22/766343.aspx" mce_href="http://blogs.msdn.com/netcfteam/archive/2006/09/22/766343.aspx"&gt;http://blogs.msdn.com/netcfteam/archive/2006/09/22/766343.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;检测平台是否支持触摸屏&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/netcfteam/archive/2006/10/02/Platform-detection-III_3A00_-How-to-detect-a-touch-screen-on-Windows-CE-in-.NET-CF.aspx" mce_href="http://blogs.msdn.com/netcfteam/archive/2006/10/02/Platform-detection-III_3A00_-How-to-detect-a-touch-screen-on-Windows-CE-in-.NET-CF.aspx"&gt;http://blogs.msdn.com/netcfteam/archive/2006/10/02/Platform-detection-III_3A00_-How-to-detect-a-touch-screen-on-Windows-CE-in-.NET-CF.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;创建OS Design和编译的过程在此略过，可以参考《Windows CE 6.0 R2开发初体验》. 我们首先在Platform Builder里创建一个子工程(Subporject),在Solution Explorer里找到Subporject节点，右键选择Add New Porject，会启动向导。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image001_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image001_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image001 border=0 alt=clip_image001 src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image001_thumb.jpg" width=370 height=280 mce_src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image001_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;在向导中，选择WCE Application，将工程名称改为”CheckPlatform”.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image002 border=0 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image002_thumb.jpg" width=437 height=395 mce_src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image002_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;为了少写代码，我们选择”Hello World” application，一般情况下，我们应该选择simple Windows Embedded CE application.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image003_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image003_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image003 border=0 alt=clip_image003 src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image003_thumb.jpg" width=448 height=406 mce_src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image003_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;我们打开Subprojects节点中的CheckPlatform（工程名称）中的Source files节点中找到CheckPlatform.cpp文件。在文件中找到WndProc函数，将代码修改为：&lt;/P&gt;&lt;PRE class="code cpp"&gt;TCHAR szPlatform[1024];
switch (message) 
{
case WM_PAINT:
    hdc = BeginPaint(hWnd, &amp;amp;ps);
    // TODO: Add any drawing code here...
    RECT rt;
    GetClientRect(hWnd, &amp;amp;rt);
    if (SystemParametersInfo(SPI_GETPLATFORMTYPE,sizeof(szPlatform),szPlatform,0)!=0) 
    {
        DrawText(hdc, szPlatform, _tcslen(szPlatform), &amp;amp;rt, DT_CENTER);
    }
    EndPaint(hWnd, &amp;amp;ps);
    break;
default:
    return DefWindowProc(hWnd, message, wParam, lParam);
}
&lt;/PRE&gt;
&lt;P&gt;代码写的并不好，主要是为了验证SystemParametersInfo函数，我们就将Platform Type显示到窗体上了。正常情况下，我们应该用下面的代码判断运行平台：&lt;/P&gt;&lt;PRE class="code cpp"&gt;if (SystemParametersInfo(SPI_GETPLATFORMTYPE,sizeof(szPlatform),szPlatform,0)!=0)
{
    if (lstrcmp(szPlatform,TEXT("PocketPC"))==0)
        ; // Pocket PC
    else if (lstrcmp(szPlatform,TEXT("Smartphone"))==0)
        ; // smartphone
}
&lt;/PRE&gt;
&lt;P&gt;如果使用SPI_GETOEMINFO参数，我们可以获得OEM信息，如果返回字符串中包括“Microsoft DeviceEmulator”，则表示当前应用程序运行在模拟器中。&lt;/P&gt;
&lt;P&gt;CheckPlatform程序编译好后，会自动加入到NK.bin 中。我们可以通过Command Shell，运行应用程序。调用Attach Device启动Windows CE操作系统后，选择Target菜单中的Target Control（快捷键Alt+1），输入”s chekplatform”，就可以运行CheckPlatform程序。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image004_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image004 border=0 alt=clip_image004 src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image004_thumb.jpg" width=398 height=199 mce_src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image004_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;好了，最后看一下运行结果：&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image006_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image006_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image006 border=0 alt=clip_image006 src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image006_thumb.jpg" width=493 height=372 mce_src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image006_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;修改操作系统的类型&lt;/H3&gt;
&lt;P&gt;上面的话题其实很多文章都讨论过了。但是在实际工作中，我们会遇到一些平台迁移的工作。我们会首先将Windows Mobile的软件在Windows CE上运行，以验证功能。不过有些软件检测了操作系统类型，在不修改软件代码的情况下，我们是否可以在Windows CE上运行检测平台类型的应用程序呢？&lt;/P&gt;
&lt;P&gt;Windows CE操作系统的Platform Type类型值是在BSP中被指定的，我们可以通过修改BSP中的Platform Type来改变系统的Platform Type。&lt;B&gt;注意：这种情况只能出现在测试时，不应该修改实际产品的平台类型，否则会引起很多安全性的问题。&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;我们打开Windows CE 6.0 R2的源代码，位置在：&lt;/P&gt;
&lt;P&gt;x:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\INC&lt;/P&gt;
&lt;P&gt;我们修改的是DEVICEEMULATOR的代码，如果是其他平台的代码，则去相应BSP文件夹中的指定位置。在BSP的INC文件夹中，我们会找到一个ioctl_cfg.h文件。&lt;/P&gt;
&lt;P&gt;在ioctl_cfg.h文件中，我们会找到下面的代码：&lt;/P&gt;&lt;PRE class="code cpp"&gt;#if defined( project_smartfon )
    #define IOCTL_PLATFORM_TYPE (L"SmartPhone\0")
#elif defined( project_wpc )
    #define IOCTL_PLATFORM_TYPE (L"PocketPC\0SSDK\0")
#else
    #define IOCTL_PLATFORM_TYPE (L"DeviceEmulator")
#endif
    #define IOCTL_PLATFORM_OEM (L"Microsoft DeviceEmulator")
&lt;/PRE&gt;
&lt;P&gt;Device Emulator的BSP通过编译选项区分了不同的平台类型，如果是Windows CE系统，则Platform Type为DeviceEmulator。好了，我们可以通过修改IOCTL_PLATFORM_TYPE的值，来“欺骗”操作系统，让应用程序认为自己运行在Pocket PC或Smartphone上。&lt;B&gt;注意：因为&lt;/B&gt;&lt;B&gt;Windows Mobile&lt;/B&gt;&lt;B&gt;和Windows CE&lt;/B&gt;&lt;B&gt;的函数库存在巨大差异，Windows Mobile&lt;/B&gt;&lt;B&gt;的应用程序在Windows CE&lt;/B&gt;&lt;B&gt;上未必能够直接运行。&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;修改IOCTL_PLATFORM_TYPE之后，我们需要重新编译BSP，才能够完成Platform Type的修改。在Build菜单中选择Advanced Build Commands中的Rebuild Current BSP and Subprojects。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image007_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image007_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image007 border=0 alt=clip_image007 src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image007_thumb.jpg" width=454 height=411 mce_src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image007_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;我们可以编译BSP和Subporject后，调用BuildRel和Makeimg生成新的NK.bin。这样，我们就可以节省大量的重新编译的时间。在我的机器上大概几分钟就完成了BSP的编译，如果是重新Build操作系统的话，需要二十分钟左右。&lt;/P&gt;
&lt;P&gt;NK编译成功后，选择Attach Device，重新运行系统和CheckPlatform程序，会得到下面的运行结果：&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image009_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image009_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image009 border=0 alt=clip_image009 src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image009_thumb.jpg" width=480 height=361 mce_src="http://blogs.msdn.com/blogfiles/wincechina/WindowsLiveWriter/WindowsCE_9DE0/clip_image009_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;最后还需要提示一下，这种方法只对通过SystemParametersInfo API检测Platform Type的应用程序有效。如果软件使用了其他方法检测Platform Type的话，那就需要具体问题具体分析了。&lt;/P&gt;
&lt;P&gt;更多关于Windows Embedded CE开发的文章，请参考“Windows Embedded CE 中国研发团队”的中文博客：&lt;A href="http://blogs.msdn.com/wincechina/" mce_href="http://blogs.msdn.com/wincechina/"&gt;http://blogs.msdn.com/wincechina/&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9599957" width="1" height="1"&gt;</content><author><name>ninma</name><uri>http://blogs.msdn.com/members/ninma.aspx</uri></author></entry><entry><title>让Windows CE 6.0 R2支持.NET CF 3.5</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/wincechina/archive/2009/05/09/windows-ce-6-0-r2-net-cf-3-5.aspx" /><id>http://blogs.msdn.com/wincechina/archive/2009/05/09/windows-ce-6-0-r2-net-cf-3-5.aspx</id><published>2009-05-09T13:07:00Z</published><updated>2009-05-09T13:07:00Z</updated><content type="html">&lt;P&gt;作者：马宁&lt;/P&gt;
&lt;P&gt;原文：&lt;A title=http://blog.mcuol.com/User/aawolf/Article/6389_1.htm href="http://blog.mcuol.com/User/aawolf/Article/6389_1.htm" mce_href="http://blog.mcuol.com/User/aawolf/Article/6389_1.htm"&gt;http://blog.mcuol.com/User/aawolf/Article/6389_1.htm&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .NET Compact Framework已经升级到3.5的版本了，.NET CF 3.5支持LINQ和WCF等新的特性。对于Windows Mobile的开发人员来说，只需要安装一个更新的CAB包就可以了。可是Windows CE的开发者如果想将.NET CF 3.5加入到OS Design，还是需要花一点功夫的。我们会使用革新2410D开发板作为我们的平台，关于该开发板的介绍和开发过程，大家可以参考我之前的文章——《革新2410D开发板试用手记》，链接如下： &lt;BR&gt;&lt;A href="http://www.cnblogs.com/aawolf/archive/2008/05/29/1209854.html" mce_href="http://www.cnblogs.com/aawolf/archive/2008/05/29/1209854.html"&gt;http://www.cnblogs.com/aawolf/archive/2008/05/29/1209854.html&lt;/A&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 来自Mike Hall的QFE &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这篇文章的起因是Mike Hall在自己BLOG上发表的一篇文章： &lt;BR&gt;&lt;A href="http://blogs.msdn.com/mikehall/archive/2008/03/17/net-compact-framework-3-5-component-for-windows-embedded-ce-6-0-catalog-component.aspx" mce_href="http://blogs.msdn.com/mikehall/archive/2008/03/17/net-compact-framework-3-5-component-for-windows-embedded-ce-6-0-catalog-component.aspx"&gt;http://blogs.msdn.com/mikehall/archive/2008/03/17/net-compact-framework-3-5-component-for-windows-embedded-ce-6-0-catalog-component.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这篇文章介绍了微软在2008年一月份推出的一个QFE的包，其中包括了.NET Compact Framework 3.5的组件。所谓QFE，就是Quick Fix Engineering，用于快速修复一些BUG或者增加一些新的功能，修改比SP要小，所以可以每月推出。 &lt;BR&gt;好了，既然有老大级的人物给我们指明了方向，小弟们跟着干就是了，首先在微软网站上下载这个QFE包： &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a83124d5-7c8e-4abe-87fd-69654561be40&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a83124d5-7c8e-4abe-87fd-69654561be40&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=a83124d5-7c8e-4abe-87fd-69654561be40&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 然后确认你的开发计算机上已经装了下面的东西： &lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. Visual Studio 2005 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. Visual Studio 2005 SP1 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. Visual Studio 2005 SP1 Update for Vista (if applicable) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4. Windows Embedded CE 6.0 Platform Builder &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5. Windows Embedded CE 6.0 SP1 (required if PB 6.0 Tools have been installed) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6. Windows Embedded CE 6.0 R2&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 别紧张，基本上来说，只要你用的是Windows CE 6.0 R2，那么这些东西就都有了。&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811125209image002.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811125209image002.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 接下来，我们确认将Visual Studio 2005关闭，然后运行QFE的安装程序就可以了。如果是在Vista下安装的话，可能会遇到安装文件出错的问题，这是由权限问题造成的。我们可以参考下面的文章解决： &lt;BR&gt;&lt;A href="http://support.microsoft.com/kb/950793/en-us" mce_href="http://support.microsoft.com/kb/950793/en-us"&gt;http://support.microsoft.com/kb/950793/en-us&lt;/A&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 不过我在Vista下安装时没有碰到这个问题。 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 创建.NET Compact Framework 3.5的应用程序&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 好了，安装完成后，我们是不是需要打开Visual Studio 2005开始我们的平台定制历程了？不，首先还是让我们先换一台机器。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 换机器干嘛？因为我们遇到了一个逻辑问题——.NET CF 3.5的应用程序在哪里？.NET CF 3.5的应用程序是由Visual Studio 2008开发的，而我们的Platform Builder 6.0是运行在Visual Studio 2005之上的。您可以将VS 2005和VS 2008装在同一台机器上，但是我没有那么做，而是换了台装有VS 2008的机器，来进行下面的应用程序开发。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 需要说明的是，按照常规，我们应该先用Platform Builder 6.0构建一个CE 6.0的平台，然后导出SDK，然后再装有VS 2008的机器上安装，安装完成后再使用VS 2008开发一个针对该CE 6.0平台的应用程序。如果真这么干，拐弯就拐到爪哇国去了。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 幸好Visual Studio 2008为我们提供了另一种方式，还是来看一下：&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811125114image004.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811125114image004.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 打开Visual Studio 2008后，还是首先选择File – New – Project菜单项。在New Project对话框中选择Visual C#中的Smart Device，然后选择创建Smart Device Project，名字随便定。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 接下来的对话框对于经常看我文章的朋友也会很熟悉：&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811125056image006.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811125056image006.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 只是这一次我们选择的Target platform不是Pocket PC或者Smartphone，而是Windows CE，还要记得一定要选择.NET CF 3.5。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 好了，接下来就进入了IDE的窗口设计器，看起来和普通的WinForm程序没有太多区别。我们添加了三个按钮和一个ListBox，还有两个菜单项。&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811125039image008.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811125039image008.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;在第一个Button“Message”里添加下面的事件处理函数：&lt;/STRONG&gt; &lt;PRE class="code cpp"&gt;private void button1_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show("Hello,.NET CF 3.5"); 
}
&lt;/PRE&gt;我承认我没追求，所有程序不都是从Hello World开始的吗？为了要突出一下.NET Compact Framework 3.5的新特性，我们还要添加对于LINQ的支持： &lt;PRE class="code cpp"&gt;private void button2_Click(object sender, EventArgs e) 
{ 
    listBox1.Items.Clear();

    var numbers = new List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    var evenNumbers = 
        from p in numbers 
    where (p % 2) == 0 
        select p;

    foreach (var number in evenNumbers) 
        listBox1.Items.Add(string.Format("{0} ", number)); 
} 
&lt;/PRE&gt;关于LINQ我就不多作解释了，记得添加System.Linq的引用，还有： &lt;BR&gt;using System.Linq; &lt;BR&gt;在添加完Linq后，我们还有一个更直接的办法，就是版本号： &lt;BR&gt;&lt;PRE class="code cpp"&gt;private void button3_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show(Environment.Version.ToString()); 
} 
&lt;/PRE&gt;System.Environment中的Version属性可以很直接的告诉我们当前运行的.NET CLR的版本号。具体细节看MSDN帮助吧。 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 好了，程序编写好了，接下来就要运行它了。但是我们的Visual Studio 2008里并没有Windows CE的模拟器。没办法，只好选择Windows Mobile 6 Professional的模拟器来跑了。&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811124947image009.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811124947image009.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 事实证明，在应用程序开发方面，Windows CE和Windows Mobile的差距的确不大。程序不但跑起来了，而且菜单还按照Windows Mobile的方式显示到了窗体下方。&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811124805image010.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811124805image010.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 上面就是点击Version按钮后的运行结果，可以看到我们的.NET CLR是3.5的。 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 创建支持.NET CF 3.5的OS Design &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OK，终于可以回到我们的Platform Builder里创建包含.NET CF 3.5的OS Design了。我们可以创建一个新的OS Design，或者利用已有的OS Design。 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 具体方法请参考： &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 革新2410D开发板试用手记(三) &lt;BR&gt;&lt;A href="http://www.cnblogs.com/aawolf/archive/2008/06/03/1212696.html" mce_href="http://www.cnblogs.com/aawolf/archive/2008/06/03/1212696.html"&gt;http://www.cnblogs.com/aawolf/archive/2008/06/03/1212696.html&lt;/A&gt; &lt;BR&gt;Windows Embedded CE 6.0开发初体验（五）构建CE平台 &lt;BR&gt;&lt;A href="http://www.cnblogs.com/aawolf/archive/2008/01/15/1040306.html" mce_href="http://www.cnblogs.com/aawolf/archive/2008/01/15/1040306.html"&gt;http://www.cnblogs.com/aawolf/archive/2008/01/15/1040306.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当我们打开OS Design的Catalog Item View页面。在Core OS - CEBASE – Application and Services Development下，我们可以看到.NET Compact Framework 2.0和.NET Compact Framework 3.5两个选项。选择.NET CF 3.5的选项和简体中文资源，以及OS Dependencies for .NET Compact Framework 3.5的选项。&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811124727image012.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811124727image012.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当然，我们也可以在OS Design的创建向导里选择.NET CF 3.5的组件。 &lt;BR&gt;为了验证我们的.NET CF 3.5 CLR可以良好运行，我们还需要添加一个.NET CF 3.5的应用程序。怎么添加呢？&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 第一步，呃，从另外一台机器上把应用程序拷过来…… &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 第二步，在Solution Explorer里选择OS Design下的Parameter Files下的Project.bib文件。在《Windows Embedded CE 6.0开发初体验（六）平台定制》中我们详细讨论过bib文件，请参考： &lt;BR&gt;&lt;A href="http://www.cnblogs.com/aawolf/archive/2008/02/03/1063444.html" mce_href="http://www.cnblogs.com/aawolf/archive/2008/02/03/1063444.html"&gt;http://www.cnblogs.com/aawolf/archive/2008/02/03/1063444.html&lt;/A&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 第三步，将.NET CF 3.5的应用程序加入到OS Design中:&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811124410image014.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811124410image014.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 就一句话，简单吧？然后就是OS Design的编译、下载、运行和调试了。需要说明一点的是，可能由于Debug版的NK.bin太大，我一直没有成功运行起来。不过Release版的一切正常。&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811123836image016.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811123836image016.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 关于编译和下载的话题，可以参考下面的文章： &lt;BR&gt;革新2410D开发板试用手记(六) &lt;BR&gt;&lt;A href="http://www.cnblogs.com/aawolf/archive/2008/06/24/1228752.html" mce_href="http://www.cnblogs.com/aawolf/archive/2008/06/24/1228752.html"&gt;http://www.cnblogs.com/aawolf/archive/2008/06/24/1228752.html&lt;/A&gt; &lt;BR&gt;Windows Embedded CE 6.0开发初体验(七) 编译和调试平台 &lt;BR&gt;&lt;A href="http://we.cnblogs.com/article.aspx?id=20" mce_href="http://we.cnblogs.com/article.aspx?id=20"&gt;http://we.cnblogs.com/article.aspx?id=20&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 好了，最后来看一下运行结果：我们点击了Version按钮，显示当前的.NET CF CLR确实是.NET CF 3.5版本。&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811123752image018.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811123752image018.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最后让大家看看开发板的裸照吧（开发板本来就……）&lt;/P&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.mcuol.com/download/uppic/20080811122012image020.jpg" mce_src="http://www.mcuol.com/download/uppic/20080811122012image020.jpg"&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9598954" width="1" height="1"&gt;</content><author><name>ninma</name><uri>http://blogs.msdn.com/members/ninma.aspx</uri></author></entry></feed>