适用于 Windows CE .NET 的 Microsoft .NET Framework 精简版(转)

 

适用于:
Microsoft® Windows® CE .NET
Microsoft Platform Builder 4.0
Microsoft .NET Framework 精简版
Microsoft .NET

摘要:Microsoft Windows Embedded MVP Paul Yao 概要介绍了 Microsoft .NET 如何适用于 Windows Embedded Developer Community 的嵌入式系统开发人员。(本文包含一些指向英文站点的链接。)

注意:本白皮书描述适用于嵌入式系统开发人员的 Microsoft .NET 基本元素。本文描述的 .NET Framework 精简版附带有 Microsoft Visual Studio .NET 的一个开发附件,称为 Smart Device Extensions (SDE)。在撰写本文时,SDE 技术预览已经推出,而且预计还将在 2002 年 6 月推出 Beta 版。本白皮书讲述的主题包括:
.NET 与 Microsoft Win32 相比的优势
.NET 基础
嵌入式设备中的 .NET Framework 精简版
本文内容仅供参考,只是为了您的方便而提供。与使用本文以及因此导致的后果相关的全部风险均由用户自己承担。
Windows 硬件工程会议

作者免责声明和版权:

© 2002 The Paul Yao Company 版权所有。保留所有权利。

WinHEC 主办者免责声明 本文内容不是由 Microsoft 或 WinHEC 会议联合主办者(以下简称“WinHEC 主办者”)创作的,也没有经过 WinHEC 主办者确认。因此,本文包含的信息并不代表 WinHEC 主办者的观点,并且 WinHEC 主办者不保证其准确性。WinHEC 主办者对本信息不提供任何明示或隐含的保证。

Microsoft、Windows、Windows NT、ActiveX、Visual Basic、Visual Studio 和 Win32 是 Microsoft Corporation 在美国和/或其他国家或地区的商标或注册商标。本文提及的其他产品和公司名称可能是其各自所有者的商标。

.NET 与 Win32 相比的优势

Microsoft® .NET(读作“Dot-Net”)Framework 精简版是一种用于 Microsoft Windows® for Pocket PC 和 Microsoft Windows CE .NET 的新型应用程序编程接口 (API)。这一新型 API 为移动设备和嵌入式设备带来的好处与完整的 .NET Framework 给基于 Windows 的桌面平台带来的好处相同。.NET Framework 精简版给程序员提供了两种编程语言选择:Microsoft Visual Basic® 的一个兼容 .NET 的增强版本,称为 Visual Basic .NET;以及 Microsoft Visual C#™(读作“see-sharp”),这是专门为 Microsoft .NET 开发的 C 和 C++ 语言家族中的一个新成员。

Windows CE 程序员可能会问:Windows CE 是否需要另一个 API?我们目前使用的 API 有什么问题?.NET 给 Windows CE 增加了什么?什么时候采用它更有意义?本白皮书将探讨这些问题。

Win32 有什么问题?

Microsoft Win32® 是桌面 Windows(即 Microsoft Windows XP)以及嵌入式和移动版本的 Windows(这里指 Windows CE)的核心 API。但它并不是唯一的 API,原因是:它相对底层、古怪、容易出现内存泄漏,总的来说不太好用。

现在也有其他编程接口,包括适用于 C++ 程序员的 Microsoft 基础类 (MFC) 库以及 Microsoft Visual Basic 和 Microsoft eMbedded Visual Basic。这些 API 主要是为了解决 Win32 中的缺陷而创建的,但它们也有自己的缺陷和局限性。例如,MFC 实际上是 Win32 上覆盖的一个薄层。因此,尽管 MFC 修补和隐藏了 Win32 的许多瑕疵,但它仍然具有 Win32 的一些缺陷,尤其是其命名规则非常古怪,而且很容易发生内存泄漏现象。基于 Windows 的桌面平台上的 Visual Basic 及其 Windows CE 精简版 eMbedded Visual Basic 都仅限于用作标准的 API。事实上,随着 .NET Framework 精简版的推出,Microsoft 已宣布在未来 Windows CE 版本中,将不对 eMbedded Visual Basic 进行增强,也不会将它移植到新的 CPU 体系结构。

不管是否古怪,Win32 都有自己的地位。在内存有限的环境中,这是唯一的选择,因为 Win32 创建的可执行文件最小。(尽管在一个内存有限的环境中,必须加倍小心地避免内存泄漏!)对于某些类型的软件(主要是操作系统扩展),您别无选择,只能使用 Win32。这对于设备驱动程序、命令解释程序扩展、控制面板小程序、OEM 适配层 (OAL) 以及其他底层模块也都适用。在这样的情况下,Win32 是唯一的可用编程接口。

.NET 有什么优点?

.NET 代表着使编程更加高效的一种系统化的努力成果。也就是说,.NET 不是简单的一个元素,而是许多元素的综合体。.NET 的每个元素都体现了如何简化代码的编写;总体来看,所有元素都代表着一种方向 - 有人称之为革命。对于 Microsoft 的长期客户来说,它代表着 Microsoft 以 Internet 为中心的重新塑造。而且,为 Windows 的任何版本(桌面或嵌入式)开发软件的人都需要评估 .NET 对他们有何影响,而不是是否会影响他们。

但是,为什么需要进行这些改变呢?这是因为软件开发目前仍然是一项人力密集度非常高的、容易出错的活动。相比之下,硅密度(以及用于在硅中设计复杂电路的工具)的进步已经使硬件产生了惊人的发展。而软件开发方面的进步要小得多。但是,考虑到软件的重要性(对于某些企业来说,软件是一个关键的增值领域),提高软件开发效率的努力很可能会产生巨大而持久的效益。

.NET 基础

关于 .NET 的资料已经有很多,因此,本白皮书只讲述一些基础性的知识。为了便于理解 .NET Framework 精简版具备什么功能,我在此概要介绍一下适用于在 Pocket PC 和支持 Windows CE .NET 的设备上构建移动式和嵌入式应用程序的 .NET 关键元素。

.NET 包含了许多元素,限于篇幅,我将重点介绍一些关键元素,而有些元素在此不会提及。有关 .NET 的更详细信息,请访问 Microsoft .NET Web 站点。

.NET 应用程序类

.NET 包含三个常规应用程序类:

  1. Windows 窗体 - 在客户端系统上运行的传统 GUI 应用程序。.NET Framework 精简版支持桌面 .NET Framework 的一个子集,可用于创建基于 Windows CE 的 GUI 应用程序。
  2. Web 窗体 - 基于浏览器的应用程序(即基于 HTML 的应用程序),具有一个客户端组件和一个 Web 服务器端组件。尽管 .NET Framework 精简版本身没有内置对 Web 窗体的支持,但基于浏览器和 Windows CE 的应用程序仍然可以受益于基于 .NET 的 Web 服务器的强大灵活性。将 Microsoft Mobile Internet Toolkit (MMIT) 安装到这样的服务器上时,MMIT 会进一步增强支持各种便携式设备标记语言的能力,这些标记语言包括 HTML、Compact HTML (cHTML) 和无线应用协议/无线标记语言 (WAP/WML)。
  3. Web 服务 - 基于 Web 服务器的远程过程调用 (RPC) 机制。该机制使用以 XML 编码的数据报,而且这些数据报是按照 SOAP 协议生成、并通过 HTTP 协议进行传输的。.NET Framework 精简版支持创建 Web 服务客户端,但不支持创建 Web 服务服务器。要部署基于 Windows CE 的 Web 服务服务器的开发人员可以使用用于 Windows CE 的 SOAP 工具包来执行此任务,SOAP 工具包包含在带有 Microsoft Platform Builder 的 Windows CE .NET 中。

基于 Windows CE .NET 的应用程序将会从所有这三种应用程序类受益。但是,.NET Framework 精简版直接支持的类型只有两种:Windows 窗体和 Web 服务客户端。Web 窗体将支持 Windows CE 设备,但其所有逻辑都将基于服务器。就 Web 浏览器而言,正常的 HTML(或者 WAP 或 cHTML)是在基于 Windows CE 的设备和支持 .NET 的服务器(运行 Microsoft Mobile Internet Toolkit [MMIT])之间传输的。

.NET 体系结构使您能够将来自不同编程语言的代码连接在一起。我将体系结构中的这些部分称为“公共元素”,因为它们名称中都有“公共”一词。就此而言,公共意味着标准。下面是 .NET 的一些公共元素:

  • 公共语言运行库 (CLR) - 用于运行 .NET 可执行文件的运行时环境,具有加载程序、管理内存和其他操作系统核心功能。
  • 公共类型系统 - 可从所有兼容 .NET 的编程语言中使用的标准类型。
  • 公共语言接口 - 类、方法、接口、枚举和 .NET 的其他编程元素之间的标准链接。
  • 公共中间语言 - 也称为“Microsoft 中间语言”或 MSIL,是一种独立于 CPU 的标准机器语言级代码,可以将所有 .NET 可执行文件转成该代码。

.NET Framework

.NET Framework 是一种专门为易于使用而设计的面向对象的 API。.NET API 的用户界面经过精心设计,是“可发现的”,其目的同样是:一旦了解了基础知识,就非常容易进行编程。比较一下,您就会发现 Win32 函数仅仅具有最小限度的包装,它们基本上是分散在一组动态链接库 (DLL) 中的一组函数。当程序员编写 Win32 代码来创建和控制一个窗口(基本的用户界面对象)时,就需要使用 CreateWindow、MoveWindow 和 ShowWindow 等函数。尽管相关的文档有助于您找到它们和相关的函数,但 DLL 的结构设计使得很难找到所有函数。所有函数(Windows CE .NET 有 2,500 个函数,比 Windows XP 多两倍)都淹没在一个由文件、库文件和 DLL 组成的海洋中。要找到某个函数,您必须异常警觉,不放过任何有可能会有用的函数。

.NET 利用各种类型的容器来解决此问题。而且,事实上 .NET 具有各种代码容器和数据容器。让我们先看一下 .NET 代码容器。

函数被打包成类,而类又被打包成命名空间(这些命名空间又可以打包成其他命名空间)。例如,使用一个名为 Form 的类中的函数创建和控制窗口。Form 类包含在 System.Windows.Forms 命名空间中。可以将一个命名空间名称与一个类名称结合在一起来创建一个完全限定的名称。在刚刚举过的示例中,可以通过 System.Windows.Forms.Form 明确地引用 Form 类。在这个类中,您可以找到用于处理窗口的各种元素。

.NET API 还广泛使用容器来保留数据。例如,Form 类有一个名为 Controls 的容器对象,其类型为 ControlCollection。您可以通过调用 ControlCollection.Add 来添加控件,通过调用 ControlCollection.Remove 来删除控件,通过检查 ControlCollection.Count 属性来确定窗体上的控件数目,以及使用通过 ControlCollection.GetEnumerator 方法提供的枚举器来查看可用控件的列表。如这些示例所示,就象可以将命名空间名称与类名称连接在一起一样,也可以将类名称和成员函数名称连接在一起。

就象 Forms 类具有可以在 ControlCollection 集合对象中访问的枚举器一样,许多数据容器也都带有枚举器。枚举器使您可以获得集合内容的完整列表。在前面的示例中,通过请求 Controls 集合来提供列表,很容易查看窗口中的控件。

这种组织代码和数据的方法的所有方面都表明它是一个高度一致的 API。也就是说,一旦熟悉了命名空间的基本概念,您就会看到在必须使用以前未曾用过的某个对象时,命名空间如何帮助您找到相关的函数。而且,一旦您熟悉如何将数据对象放入容器中之后,就很容易了解如何添加、删除、枚举和处理对象的集合。这样,.NET 就提供了高度的一致性和易用性 - 这是 .NET 系统设计师的大量设计和思考的结果。所有这些都将帮助程序员提高效率。

公共类型系统

公共类型系统 (CTS) 提供了大量预期的类型:有符号的整数和无符号的整数(8 位、16 位、32 位和 64 位)以及浮点数。另外,还有用于日期、时间和小数(精确的定点数)的类型(请参见表 1)。这组公共的类型简化了不同语言之间的互操作性。在 Windows CE 上,您可以使用两种不同的编程语言(C# 和 Visual Basic .NET)编写 .NET 程序。

表 1:公共 .NET 类型

.NET Framework 类型C# 别名Visual Basic .NET 别名大小
System.ByteByteByte1 字节
System.CharCharChar2 字节
System.Int16ShortShort2 字节
System.Int32IntInteger4 字节
System.Int64LongLong8 字节
System.DecimaldecimalDecimal16 字节
System.SingleFloatSingle4 字节
System.DoubleDoubleDouble8 字节
System.DateTimeDateTimeDate8 字节
System.StringStringString不等

公共语言接口

公共语言接口 (CLI) 定义了函数调用所需的绑定。CLI 以及前面讲述的公共类型使您很容易用一种语言编写代码,然后再从另一种语言访问该代码。与以前的 Windows API 不同的是,您可以自由地混合和匹配不同的语言,并且只需很少的努力就能使它们相互操作,同时还不会丢失信息。相比之下,从 Visual Basic 中调用 Win32 库就比较费劲。而且,很难从 Visual Basic 调用 C++ 函数(这是最初开发 Microsoft ActiveX® Automation 的一个关键原因)。

公共中间语言

.NET 可执行文件是用独立于 CPU 的、称为 Microsoft 中间语言 (MSIL) 的机器级代码编写的。这种代码已经以一种称为“公共中间语言”(CIL) 的形式提交到 ECMA(欧洲标准团体)。无论您使用什么名称(MSIL 或 CIL)来指称它们,这些可执行文件都可以在任何运行 .NET Framework 或 .NET Framework 精简版的系统上运行。在运行时,加载器将 MSIL 指令转换为 ARM、x86、MIPS 或 SHx 指令,而且是本机代码。这有时被称为实时 (JIT) 执行策略。

这意味着有可能生成一个可以在任何基于 Windows CE 的平台上运行的可执行文件。这样的可执行文件也可以在基于 Windows 的桌面平台(x86 Pentium 系统或 64 位 Itanium 系统)上运行。因此而实现的可移植性将使您能够编写具有非凡的可移植性的代码。这种可移植性的关键是:确定已在 .NET Framework 精简版中实现的桌面 .NET Framework 的子集,以及避免使用在 .NET Framework 精简版中针对 Windows CE 进行的扩展,因为这部分扩展在桌面上不能使用。

除了其可移植性以外,MSIL 还有另一个优势:可执行文件较小。MSIL 可执行文件一般都小于可作比较的 x86、ARM、MIPS 或 SHx 可执行文件。

嵌入式设备中的 .NET Framework 精简版

Microsoft Platform Builder 使您能够为自定义的硬件配置和生成 Windows CE 映像。所有映像都是从以下两种基本配置生成的:无头 (HLBASE) 配置和基于显示器 (IABASE) 的配置。尽管每种配置都可修改成与另一种相似,但较适合 Framework 精简版的一种是 IABASE。毕竟,.NET Framework 精简版主要是用来构建 GUI 应用程序,而且 GUI 开发不是无头 (HLBASE) 系统上的选项。表 2 总结了 Platform Builder 的 New Platform Wizard(新平台向导)中可用的 12 种配置类型。基于显示器 (IABASE) 列中的配置是适合 .NET Framework 精简版的配置。

表 2:Windows CE .NET Platform Builder 配置

无头 (HLBASE) 配置基于显示器 (IABASE) 的配置
媒体工具移动电话或智能电话
驻留网关数字图像处理设备
微内核工业自动化设备
 Internet 工具
 PDA 或移动手持设备
 零售点设备
 机顶盒
 Web 键盘
 Windows 瘦客户端

可以通过从 Platform Builder 目录的以下部分添加“.NET Framework 精简版技术预览”,将 .NET Framework 精简版添加到配置中:“Core OS / Display based devices / Applications & Services Development”。如果检查 CESYSGEN.BAT 文件,您就会看到这会将 dotnetprof2 模块添加到 DCOM_MODULES 环境变量中。

表 3 总结了构成 .NET Framework 精简版的文件。这些文件驻留在以下 Platform Builder 目录中:WINCE400OTHERSDOTNET。其中四个文件是特定于 CPU 的 Win32 可执行文件。其余文件称为“托管”文件,它有多层含义。首先,这些文件是使用 MSIL 机器指令的可移植的可执行文件。使它们成为“托管”的原因是,它们是按照一组规则编写的,其中的主要规则是它们不处理内存指针,而是依赖于 .NET 公共语言运行库中的内存回收器来管理内存。

表 3:.NET Framework 精简版支持文件

特定于 CPU 的文件托管 (MSIL) 文件
mscoree.dllmicrosoft.visualbasic.dll
WFInter.dllmscorlib.dll
DbgIpcPlatMan.dllsystem.data.dll
 system.dll
 system.drawing.dll
 system.net.irda.dll
 system.web.services.dll
 system.windows.forms.dll
 system.xml.dll

Microsoft 以技术预览的形式发布了兼容 Windows CE .NET(和 Pocket PC)的 .NET Framework 精简版。对于希望尝试一下 .NET Framework 精简版的开发人员来说,该技术预览提供了一个机会,可以运行一些代码,并可以将基于 Windows CE 的 .NET 版本与桌面版本进行比较。

如前所述,有些文件包含在 Platform Builder 版本 4.0 和更高版本中。但是,Platform Builder 目录中缺少两个文件(至少可以说它们不在 Release Candidate 中)。缺少的文件是 dbnetlib.dll 和 DbgIpcPlatMan.dll。您可以在包含 Smart Device Extensions (SDE) 的 Microsoft Visual Studio® .NET 的一个特殊版本中找到这两个文件,而这个版本可以联机订购。如果经过适当配置的、基于 Windows CE .NET 的平台上包含所有这些文件,该平台就能够运行 .NET 可执行文件了。值得注意的是,SDE 附带的这一 Visual Studio .NET 特殊版本与 2002 年 1 月上市的最终发布版本并不一样。

运行 .NET 程序

桌面和 Windows CE 上的 .NET 程序都以普通的 Win32 PE 文件格式发布。也就是说,乍看起来,Win32 可执行文件与 .NET 可执行文件似乎是相同的 - 应用程序具有 .EXE 扩展名,而共享库则具有 .DLL 扩展名。

Win32 可执行文件在以下两个方面区别于 .NET 可执行文件:(1) 标题中设置的标志,以及 (2) 所依赖的库。当操作系统加载器注意到 .NET 标志时,会调用一个特殊函数,并通过 JIT 处理器加载 MSIL 函数。(在 Windows CE .NET 上,这个函数的名称为 CeModuleJit。).NET 可执行文件依赖于 MSCOREE.DLL(即它们从 MSCOREE.DLL 导入函数)。这是支持 .NET Framework 精简版的本机 Win32 DLL 之一。

要启用 .NET Framework 精简版,必须存在两项内容:其一是前面描绘的那组文件,其二是支持 .NET 对象所需的所有 Windows CE 组件。例如,必须存在 GWES 模块,才能支持 GUI 应用程序。将 .NET Framework 精简版添加到某个映像中时,Platform Builder 会自动附加所需的 Windows CE 元素。

在 Pocket PC(或 Pocket PC 2002)上,只需将文件复制到 windows 目录中,即可完成同样的事情。而且,事实上,这对于任何基于 Windows CE .NET 的设备都适用。假定 COREDLL.DLL 和 WINSOCK.DLL 的所需部分都存在,则只要存在支持库文件,.NET Framework 精简版程序就能运行。

.NET Framework 精简版所需的 Windows CE 组件

您怎么来判断一个给定的 Windows CE .NET 版本是否支持 .NET Framework 精简版呢?您可能知道,将组件合并到 Windows CE 映像时,会设置一个或多个环境变量。在 Platform Builder IDE 中,将组件从目录拖到平台上时,系统会自动定义这些环境变量。尽管 IDE 提供了一个非常好的图形化视图,但也有其缺点。例如,如何记录系统中的内容、如何比较两个平台或如何判断(就象我们现在要做的一样)某个平台是否满足最低的组件要求?在制作平台映像时,环境变量被写到一个名为 CECONFIG.H 的文件中。您可以通过查看这组环境变量来准确地判断给定映像中存在的内容。

CECONFIG.H 包含一个环境变量列表,用来表明在建立平台时包含的组件。CECONFIG.H 自动包含在为平台创建的 Windows CE 映像(即 NK.BIN)中。这就是说,即使没有建立特定的 Windows CE .NET 平台,您仍然可以参考 CECONFIG.H 文件,了解需要什么组件。有了这个文件之后,下一步就是将那些组件与列表 1 进行比较。

支持 .NET Framework 精简版所需的 Windows CE .NET 组件

MSCOREE.DLL 需要的模块

  • CE_MODULES_FILESYS
  • CE_MODULES_GWES
  • COREDLL_COREMAIN
  • COREDLL_CORELOC 或 COREDLL_LOCUSA
  • COREDLL_FULL_CRT
  • COREDLL_CORESIOW
  • NK_NKMAPFILE
  • GWES_CURSOR 或 GWES_MCURSOR
  • GWES_KBDUI

WFINTER.DLL 需要的模块

  • CE_MODULES_GWES
  • COREDLL_LMEM
  • COREDLL_GDI_C 或 COREDLL_MGDI_C
  • COREDLL_WMGR_C
  • COREDLL_RECTAPI
  • GWES_FOREGND
  • GWES_ICON
  • GWES_IMGCTL
  • GWES_MSGQUE
  • GWES_MGTT 或 GWES_MGRAST 或 GWES_GDIFONTS 或 GWES_PGDI
  • GWES_MGBITMAP 或 GWES_PGDI
  • GWES_MGBLT 或 GWES_PGDI
  • GWES_MGBLT2 或 GWES_PGDI
  • GWES_MGBASE 或 GWES_PGDI
  • GWES_MGDRAW
  • GWES_MGDRAW 或 GWES_PGDI
  • GWES_MGDRWTXT 或 GWES_PGDI
  • GWES_MGPAL
  • GWES_MGRGN 或 GWES_PGDI
  • GWES_NCLIENT
  • GWES_SBCMN
  • GWES_TIMER
  • GWES_WMBASE
  • GWES_WINMGR

DBNETLIB.DLL 需要的模块

  • COREDLL_COREMAIN
  • COREDLL_CORELOC 或 COREDLL_LOCUSA
  • CE_MODULES_FILESYS
  • COREDLL_FULL_CRT

DBGIPCPLATMAN.DLL 需要的模块

COREDLL_LMEM

小结

那么,何时应该使用 .NET Framework 精简版 API,何时又应该使用 Win32 API 呢?对于以下核心组件,您需要使用 Win32 API:设备驱动程序、控制面板小程序、命令解释程序扩展以及 OEM 适配层。您也可以将 Win32 API 用于无头的(基于 HLBASE 的)平台,或用于必须在特别小的内存空间中运行的任何平台。

对于所有其他情况,在创建用于 Windows CE .NET 或更高版本的 GUI 应用程序时,都应该使用 .NET Framework 精简版。尤其是,客户端应用程序(窗口、菜单、对话框、控件)最适合 .NET Framework 精简版。需要访问 Web 服务的应用程序(即 Web 服务客户端)也是如此。对于上述任何一种应用程序,.NET Framework 精简版都是理想的选择。而且,由于与桌面 .NET Framework 高度兼容,建立桌面 .NET Framework 应用程序的 .NET Framework 精简版就特别简单。

总之,只要有机会,都应该编写 .NET Framework 精简版应用程序。新的 C# 编程语言、新的 Visual Studio .NET 开发环境、针对 Windows CE 的 Smart Device Extensions (SDE) 以及更新的 Windows CE .NET 模拟器,所有这些构成了一个充满乐趣、高效易用的开发环境。

缩写和术语

API应用程序编程接口

CHTMLCompact HTML

CIL公共中间语言

CLI公共语言接口

CLR公共语言运行库

CTS公共类型系统

HTML超文本标记语言

MFCMicrosoft 基础类

MMITMicrosoft Mobile Internet Toolkit

MSILMicrosoft 中间语言

OALOEM 应用程序层

SDESmart Device Extensions

VBVisual Basic

WAP无线应用协议

Win32Windows 32 位应用程序编程接口

WML无线标记语言

XML可扩展标记语言

更多信息

要获得最新的 Windows CE .NET 开发人员信息,请访问:

  1. 开发人员信息
  2. 产品信息
  3. 社区提示和技巧

Windows CE .NET 附带的联机文档和上下文相关帮助也提供了有关使用 Windows CE .NET 的全面的背景信息和说明。

要访问联机文档:

  1. 打开 Platform Builder 4.0。
  2. 要查看文档,请在 Help(帮助)菜单上选择 Contents(目录)选项卡。
    注意: 请从 MSDN 上的 Windows Embedded 下载中心安装最新的 Windows CE .NET 产品帮助文件更新。

Microsoft Windows Embedded 开发人员中心

您始终可以在 MSDN® Windows Embedded 开发人员中心找到最新的开发人员信息,包括有关 Windows CE .NET 的新闻、产品文档、技术文章、专栏、基本操作、下载、代码示例、修复程序和更新。

加入、共享和开发 Windows Embedded 社区

请访问 Windows Embedded 社区,获得帮助您跟上平台技术的发展步伐的资源,包括提示和技巧、聊天、新闻组、特性下载等。您还可以共享您的开发经验,从有价值的对等支持关系中获益,以及找到许多 Windows CE .NET 相关问题的答案。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值