版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第十五章 Windows CE.NET应用开发15.1 应用开发概述 15.2 Windows CE的应用编程接口 15.3 Windows CE应用开发工具 15.4 eMbedded Visual C+ 4.0应用开发概述 15.5 Windows CE通信开发实例附录1: .NET Compact Framework开发附录2: WinCE高级编程附录3:应用程序开发实例215.1 应用开发概述315.1.1 Windows CE应用程序开发流程 o 开发环境的搭建o 应用程序代码的编写和调试o 应用程序的发布 4应用开发流程 515.1.2 Windows CE编程特性 o CE不能
2、运行现有的桌面应用程序 o 内存管理 o 电源管理 o 用户界面 615.1.3 Windows CE编程基础 o 1. Windows 消息处理机制 72. Unicode o 使用Unicode进行应用程序开发可以满足产品国际化的要求,也可以很容易地在不同语言之间进行数据交换,使开发者能够自由分配支持所有语言的单个二进制.exe文件或.dll文件,同时提高应用程序的运行效率。o Windows CE规定,所有的字符串必须采用Unicode类型而不是char类型声明,程序中的所有文本文字必须是Unicode字符串,同时,必须为Unicode字符串选择正确的运行库函数。 83. 文件I/O o
3、 与桌面Windows相比较,Windows CE没有当前目录的概念,所有的文件名和路径都必须以“”开始使用完整的路径名,文件名必须是Unicode。o 在读写一个文件时,应用程序使用内存映射的I/O代替使用缓冲的I/O。94. 内存要求 o 基于嵌入式系统的特征,应用程序必须是低内存要求,应用程序必须保存静态变量的大小和数量为最小,必须保持较小的EXE文件,随时检查内存分配的返回值,集中分配应用程序的内存,并且处理WM_HIBERNATE消息。 1015.2 Windows CE的应用编程接口11Windows CE的应用编程接口o Windows CE .NET 应用程序开发人员目前有三种
4、API可以选择,它们分别是:n Win32 API(应用程序接口)n MFC(微软开发类库)与ATL(活动模板库,它主要用于创建 COM 组件、Web 服务和 Microsoft ActiveX 控件)n Microsoft .NET Framework 精简版。 1215.2.1 Win32 API o Win32应用编程接口的目的是提供了一个常用的界面的设置,但不同的平台由于不同的特性及硬件的约束,其部分应用编程接口也不同 o Windows CE.NET API函数从用途上主要分为下列几大类:n 服务性应用、最终用户、核心操作系统服务、通信和网络、文件系统和数据存储、字体、硬件支持、国际
5、化、Internet客户端、多媒体、安全、外壳。 13Win32程序模型 o Windows CE的Win32 API具有一些独有的特征:n 它比其他的32位的Windows操作系统的Win32 API要小,它只包括大约相当于Windows NT的半数的API;n 它能够在操作系统的层次,而不是在应用程序的层次上处理通知事件(如时钟);n 触摸屏的APIn 对数据库的内置的支持n 高度的模块化1415.2.2 MFC o MFC是一个基于C语言的面向对象的程序设计框架,它大大简化了Windows的编程工作 o 同桌面Windows 的MFC库相比较,Windows CE.NET的MFC库在包含
6、的C+类方面有所不同 1515.2.3 ATL o Windows CE提供了对ATL的支持,ATL是ActiveX Template Library的缩写,它是一套C模板库,利用它可以开发出体积更小、速度更快的控件,对于COM组件的开发,它提供了最大限度的代码自动生成以及可视化支持。o Windows CE所支持的ATL是桌面Windows中ATL的一个子集o ATL主要在应用层上支持基于COM组件技术的OLE2和 ActiveX 1615.2.4 .NET Compact Framework o Win32 函数基本上是分散在一组动态链接库 (DLL) 中,所有函数都被保存在文件、库文件或
7、者DLL当中。要找到某个函数,必须非常清楚包含该函数的文件或者DLL,这是很费劲的一种工作。 o .NET Framework 是一种专门为易于使用而设计的面向对象的 API。.NET API 的用户界面经过了精心设计,是“可发现的”,其目的是:一旦开发者了解了基础知识,就非常容易进行编程。 17.NET Compact Framework o Microsoft .NET Framework 精简版(.NET Compact Framework)是一种用于Microsoft Windows CE .NET和Microsoft Windows for Pocket PC的新型应用程序编程接口
8、(API)o 它为程序员提供了两种编程语言选择:n一个是Microsoft Visual Basic 的兼容 .NET 的版本,称为 Visual Basic .NET;n另一个是Microsoft Visual C#,这是专门为 Microsoft .NET 开发的 C 和 C+ 语言家族中的一个新成员。 18.NET Compact Frameworko 通过Platform Builder,开发者能够为特定目标硬件配置和生成 Windows CE 映像。所有映像都是从以下两种基本配置生成的:n无头 (HLBASE) 配置n基于显示器 (IABASE) 的配置。o 尽管每种配置都可修改成与
9、另一种相似,但较适合 Framework 精简版的一种是 IABASE,因为.NET Framework 精简版主要是用来构建 GUI 应用程序。 19Windows CE .NET Platform Builder 的典型配置类型 无头无头 (HLBASE) 配置配置基于显示器基于显示器 (IABASE) 的配置的配置媒体工具媒体工具移动电话或智能电话移动电话或智能电话驻留网关驻留网关数字图像处理设备数字图像处理设备微内核微内核工业自动化设备工业自动化设备 Internet 工具工具 PDA 或移动手持设备或移动手持设备 零售点设备零售点设备 机顶盒机顶盒 Web 键盘键盘 Windows
10、瘦客户端瘦客户端2015.2.5 各种编程接口的比较 o 资源占用方面 o 程序运行大小方面 2115.3 Windows CE应用开发工具2215.3.1 Windows CE应用程序开发的选择 o Windows CE应用程序开发,代码的选择主要有两种:n托管代码:是指使用.NET Compact Framework开发的程序代码,可执行文件被编译成MSIL,执行时需要有.NET的运行时环境。托管代码的典型例子就是Visual Basic .NET和 C# .NET。n本地代码:也称为非托管代码,是指使用C+等高级语言开发的程序代码,可执行文件被编译成与CPU指令集有关的机器码,可以直接运
11、行。由eMbedded Visual C+ 开发出来的代码就是本地代码。 23托管代码特征 o 托管代码是可移植代码,这是因为.NET的可执行程序能够运行在任何已经安装了相应的通用语言运行时(CLR)的平台上,而不管是哪种CPU。o 托管代码也是安全代码,因为它有一整套特性来避免令人烦恼的非托管代码中存在的问题,例如隐式指针,可以消除内存泄漏的自动内存管理和防止内存越界的数组边界保护。o 我们有时也称托管代码为“.NET代码”,因为托管代码直接依赖于.NET精简框架中提供的编程接口。 24本地代码的特征 o 本地代码之所以被称为“Native”,是因为生成的可执行文件格式不是可移植的CIL格式
12、,而是本地的处理器指令集,如SH3或者StrongARM处理器。o 同时,本地代码也被称作非安全的代码(Unsafe code),因为它缺少对内存泄漏、“坏”指针和数组越界的保护机制,而这些机制都在通用语言运行时中已被提供。 25托管代码和本地代码的区别 o 本地代码主要针对于Native 应用 o 托管代码主要针对于.NET应用 26托管代码的编译和运行过程 2715.3.2 Windows CE应用程序开发工具概述 o 在开发Windows CE应用程序时,我们可以选择的工具包括以下三种:neMbedded Visual C+ 4.0:nVisual Studio .NET 2003nVi
13、sual Studio 2005o 一般来说,程序员可以使用 Visual Studio .NET 2003或者Visual Studio 2005来创建针对 .NET Framework 精简版的应用程序,可以使用eMbedded Visual C+ 4.0或者Visual Studio 2005创建应用程序。 28开发模型的演变 o Windows CE 4.x开发模型 29o Windows CE 5.x开发模型 3015.3.3 EVC集成开发环境 o 多数程序员的最佳选择仍然是eMbedded Visual C+,因为嵌入式系统资源有限,C+编译器效率高、性能好,编译出的应用程序结构
14、紧凑 311. EVC概述 o 随着Windows CE版本变化,eVC也推出了相应的版本。其对应关系如下表 eVC3.0Windows CE3.0eVC4.0Windows CE4.0eVC4.0+sp1Windows CE4.1eVC4.0+sp2Windows CE4.2eVC4.0+sp4Windows CE5.032(1) SDK o SDK(Software Development Kit)包含了一个特定平台的所有函数。o 在使用eVC进行开发前,必须安装特定平台的SDK,而且进行开发时必须了解特定平台支持的函数,在SDK中不包括的函数不能使用。 o Microsoft提供了一些S
15、DK,如Standard SDK、Pocket PC2003、SmartPhone2003等等。 33SDK的导出o如果使用 eVC针对某一特定硬件平台进行开发,那就要从Platform Builder导出特定平台的SDK,然后安装SDK。o导出的SDK是一个Windows安装程序(.msi文件),SDK的内容取决于包含在平台中的操作系统配置、运行时库、OAL(OEM Adaption Layer)、和设备驱动程序。 34(2)EVC集成开发环境 o在Windows CE下开发软件的编译器必须满足两个特点:第一、程序能够相对快速地执行;第二、相对减少对系统资源的消耗。EVC是最符合这两个特点的
16、. 35EVC集成开发环境o EVC集成开发环境包括以下内容:n编译器:包含c/c+编译器。n模拟器:一个运行在CPU Ring 3 级别的用户程序。n平台管理器:能够将编译的程序下载到指定的平台上。n调试器:能够单步执行程序和设置断点。n工作区:包含类视图、资源视图、文件视图。n代码编辑区:也就是文本编辑器。n类向导和应用程序向导。n远程调试工具。n帮助文档和在线帮助。 36EVC 与VC的区别 o EVC编译器支持多种嵌入式CPU,支持多种指令集。VC只支持X86指令集。o 为了能在开发机上调试,EVC包含一个模拟器,而VC不具备,也不需要。o EVC包含远程调试工具,而VC只包含本地调试
17、工具。o 随EVC安装附带的SDK内容非常少,必须安装Windows CE.NET才能得到全部的SDK。随VC附带的SDK则包含全部的内容。 372. EVC集成开发环境的重要工具 o (1)模拟器 38o (2)平台管理器Platform Manager 39o (3)EVC远程工具 工具名称工具名称描述描述Remote File Viewer在在Desktop PC上查询和管理远程设备中的文件上查询和管理远程设备中的文件Remote Process Viewer在在Desktop PC上浏览远程设备上运行的进程以及线程,上浏览远程设备上运行的进程以及线程,同时可以终止指定的进程同时可以终止
18、指定的进程Remote Zoomin抓取远程设备上的屏幕图像抓取远程设备上的屏幕图像Remote Registy Editor在在Desktop PC上管理远程设备注册表上管理远程设备注册表Remote Heap Walker显示在远程目标设备上运行的进程、堆标识符和标志显示在远程目标设备上运行的进程、堆标识符和标志位信息位信息Remote Spy+在在Desktop PC上显示远程设备上运行的窗口列表和窗上显示远程设备上运行的窗口列表和窗口消息口消息4015.3.4 Visual Studio.NET工具 o Visual Studio是Windows平台下的应用程序集成开发环境,它是一个强
19、大的可自定义编程系统,可以利用它所包含的各种工具快速有效地开发功能强大的Windows应用程序、Web应用程序和移动设备应用程序。 411. 编程语言 o 在Visual Studio.NET中,编程语言分为两种:n (1)C#n (2)Visual Basic .NET422. SDE o 智能设备扩展(Smart Device Extension ,SDE)是一个Visual Studio集成包(Visual Studio Integration Package ,VSIP),它是Visual Studio.NET的插件。与eMbedded Visual Tools工具不同,它不能单独运行
20、,而必须安装Visual Studio.NET后才能使用。o 在SDE中,包含了一系列预建的设备模型以及设备开发包,可以帮助开发人员针对特定目标设备开发特定的应用。SDE允许直接写应用程序到Windows CE.NET设备或仿真器,并且可以为嵌入式设备定制Visual Studio.NET开发环境。 433. 基于.NET Compact Framework的编程 44.NET Compact Framework组成 o WinForms o ADO.NET o XML and XML Web Services 45WinFormso 表单:nForm f = new Form();nf.Te
21、xt = “My Application”;/设置表单头o 控件:nButton b = new Button();nf.Controls.Add(b);/将按钮控件添加到表单中o 时钟:nTimer t = new Timer();nt.Interval = 1000 ; /设置时间间隔milliseconds 46WinForms示例opublic class HelloWorldoopublic static void Main()ooForm frm = new Form( );oLabel lbl = new Label( );olbl.Text = Hello world;ofrm
22、.Controls.Add(lbl);oApplication.Run(frm);oo47ADO.NET 48ADO.NET编程实例o 建立DataSet的过程 nDataSet myDS = New DataSet(Project);nDataTable myDT = myDS.Tables.Add(Task);nmyDT.Columns.Add(Name,System.Type.GetType(System.String);nmyDT.Columns.Add(Start,System.Type.GetType(System.String);nmyDT.Columns.Add(Duratio
23、n,System.Type.GetType(System.String); 49o 填充DataSetn DataRow myDR = myDS.TablesTask“.NewRow();n myDRName“ = Design Code“;n myDRStart“ = 2/1/2003 ;n myDRDuration“ = 2 days“;n myDS.TablesTask“.Rows.Add(myDR); 5015.3.5开发软件的依赖关系 5115.4 eMbedded Visual C+ 4.0应用开发概述5215.4.1 MFC应用程序的建立 53建立一个MFC 应用程序 54设置用
24、户界面特性 55选择使用MFC库 56类和文件名 5715.5 Windows CE通信开发实例5815.5.1 Windows CE串行通信原理 oS3C2410 处理器的串行口有3 个,分别是UART0,UART1 和UART2。oUART 异步串行I /O 方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送,其原理如图 5915.5.2 功能描述 o实现Windows CE 上一个超级终端程序,这个程序会调用底层驱动并抓取数据流。 o在主编辑框中将显示从串口模块(GPS/GPRS)中发送上来的字符串。在Send 左边的编辑框中显示即将发送的字符串,在Status 左边的编辑
25、框中显示读写状态和其他信息。Open 用来打开已选择好的COM,Clear 用来清除当前主编辑框中的字符串。 6015.5.3 关键代码分析 o 在这个实例中,主要涉及到对串行端口的读写操作。串行端口的本质功能是作为CPU 和串行设备间的编码转换器。o 当数据从 CPU 经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。o 在Windows CE 环境(包括桌面Windows)下,串口是系统资源的一部分。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。o 需要格外注意的是,在Window
26、s CE.net 中使用的编码方式都是Unicode,因此对于串口字符的显示,存在编码显示的问题,即我们常说的ANSI code 到Unicode 的转化问题 61关键代码 o 打开串口 nhSerial = CreateFile(LCOM1:,nGENERIC_READ | GENERIC_WRITE,n0,nNULL,nOPEN_EXISTING,n0,nNULL);nif(m_hSerial = NULL)n return;n62o 关闭串口 n if(hSerial != NULL)n n CloseHandle(hSerial);n hSerial = NULL;n 63o 写串口
27、n WriteFile (hSerial, / 设备句柄n &Byte, / 数据缓冲区地址n nByte, / 数据大小n &dwNumBytes, / 返回发送出去的字节数n NULL / 不支持重叠n );64o 读串口 n ReadFile(hSerial,/设备句柄n &ch, /读缓冲区地址n &chBytes,/返回接收的字节数n NULL /不支持重叠n );65o 转换操作 n MultiByteToWideChar n WideCharToMultiByte 6615.5.4 源代码剖析 o 读线程 67o 写线程 68End of Chap
28、ter156970附录1: .NET Compact Framework开发711. 开发Windows窗体应用程序o Windows窗体控件介绍n 可用控件n 控件创建n 控件成员n 控件支持的行为o 示例o 调试o 完成和分发应用程序72Supported ControlsButtonCheckBoxCombooxContextMenuDataGridDomainUpDownFileOpenDialogo Supported controlsHScrollBarImageListLabelListBoxListViewFileSaveDialog MainMenuNumericUpDown
29、PanelPictureBoxProgressBarRadioButtonGroupBoxRichTextBoxNotificationBubblePrint ControlsStatusBarTabControlTextBoxTimerToolBarTreeViewVScrollBaro Unsupported controls o Unsupported controls not available in CECheckedListBoxColorDialogErrorProviderHelpProviderLinkLabelNotifyIconToolTipSplitterFontDia
30、log73完成和分发应用程序o 选择项目设置o 对应用程序进行打包o 分发应用程序74选择项目设置o 使用文件的Build Action属性o 将一个图标关联到应用程序o 设置部署目录o 应用程序私有程序集的优点75对应用程序进行打包o 创建针对处理器的CAB文件o 使用Visual Studio .NET生成CAB文件o 使用CAB向导生成CAB文件o 使用资源文件生成器o 配置文件76分发应用程序o 安装.NET Compact Frameworko 从一个Web站点进行部署o 从一个文件共享进行部署o 从另外的设备进行部署o 使用内存存储卡进行部署o 通过ActiveSync进行部署o
31、使用Trickle-Feed部署o 将程序集安装到全局程序集缓存中772. SQL Server CE及ADO.NET的使用o ADO.NET中的数据对象o 与SQL SERVER CE集成使用78ADO.NET architecture 79SQL Server CE的使用o 对SQL Server CE进行编程有3个不同的阶段:n 创建本地SQL Server CE数据库n 更新本地数据n 将在本地更改的数据合并回中央数据库80SqlServerCe数据编程对象o 用代码创建本地数据库n 创建一个SqlCeEngine对象n 通过连接这个新的数据库再执行一些SQL DDL指令来向数据库中添
32、加一些数据表o 用SQL添加数据n 可以使用SqlCeCommand对象来对本地数据库执行SQL DML指令81SqlServerCe数据编程对象(续)o 检索数据行n使用SqlCeDataReader类o SqlCeDataReader对象需要一个带有某些SQL命令的SqlCeCommand对象,这个命令通过一个连接到SQL Server CE数据库的SqlCeConnect对象来选择各个行,然后可以对SqlCeCommand调用ExecuteReader方法来创建SqlCeDataReader对象。n使用Dataset及数据绑定o 当Dataset以这种方式获得了数据之后,就可以使用数据绑
33、定在控件中显示及更新数据。SqlCeDataAdapter对象能够向Dataset对象填充数据并且再对底层数据库的任何变动进行更新。n在带有参数的情况下使用SqlCeCommand对象823. I/O系统o FileStreamo MemoryStreamo NetworkStreamo StreamReadero StreamWriter83FileStreamo FileStream对象的构造函数有多种重载方式,但是它至少要求作为字符串的文件名和一个FileMode枚举值作为参数o Stream的构造函数有接受FileAccess枚举参数的重载,这些枚举参数指定打开文件进行读取还是写入操作
34、,或者同时进行两种操作o 打开或创建一个文件时,可以为构造函数传递一个FileShare枚举成员,说明该文件与其他使用者之间的共享方式。o 使用FileStream的ReadByte方法以字节方式读取文件84FileStream(contd)o BinaryReader和BinaryWriter类允许直接从流中读取基元数据类型或者将其写入流中,而无需执行与字符之间的转换操作。o Seek方法改变读取或者写入指针在流中的位置o .NET Framework完整版使用的FileStream对象的Lock和Unlock方法对文件内的区域进行锁定,而在.NET Compact Framework中不支
35、持这两个方法。85MemoryStreamo MemoryStream对象可以想像为没有目标设备的流,而是内存中的一个字节缓冲区。o 可以进行读取或写入操作,也可即进行读取操作又进行写入操作。o 构造对象时,可以指定自已的字节数组缓冲区,或是让.NET Compact Framework运行库代为分配和管理一个缓冲区o 通过使用Read、ReadByte、Write和WriteByte等方法,可以执行低级别的读取与写入操作。86NetworkStreamo 构造NetworkStream对象,首先需要创建流需要使用的套接字,然后将这个套接字作为参数传递给NetworkStream的构造函数。o
36、 为了预防网络错误,就很有必要将读取或者写入操作放在try/catch中,以捕获在网络连接断开时导致的IOException类型的导常.o 要执行异步读取操作,使用BeginRead方法。BeginRead启动从流中读取字节的操作,返回一个IAsyncResult对象,此对象必须被传递给稍后调用的EndRead方法以便正确地结束读取操作。87StreamReader与StreamWritero StreamReader和StreamWriter类从TextReader和TextWriter抽象派生而来。它们使用流执行字符的输入和输出,并使用某种编码方式将字符翻译成字节、将字节翻译成字符,使底层
37、的流可以被读取或者写入。o SteamReader和StreamWriter类的各种构造函数接受任何类型的Stream对象:FileStream,MemoryStream和NetworkStream;而且接受纯文件名作为参数,并默认的创建相关的FileStream对象。88StreamReader与StreamWriter(续)o 通过使用FileSteam类的Read方法的一个重载从流中检索单个字符或者成组的字符,可以使用StreamReader对象在一个FileStream对象上执行字符读取操作,不接受任何参数的Read方法返回一个整数,表示读取的字符的数值编码值,或者返回-1表示文件尾。
38、o StreamReader和StreamWriter对象使用某种编码方式读取和写入文件。要构造使用特定的编码方式的StreamReader或StreamWriter对象,使用一个重载,这个重载用一个System.Text.Encoding属性来指定编码方式。89StreamReader与StreamWriter(续)o 当使用Unicode编码时,字符可以按照little-endian或big-endian字节顺序存储。默认的字节顺序是little-endian。如果生成Uncode文件需要在big-endian平台上读取,可以使用Encoding.BigEndianUncode枚举。o 写
39、入文件时,可以先创建一个StreamWriter对象,然后将希望写入的FileStream对象作为参数传递给它。904. 网络编程o System.Net.Sockets命名空间为.NET Framework提供了Winsock的托管实现.o System.Net.Sockets命名空间有TcpListener和TcpClient类,其中包含了执行这类事务的简单方法。这些类以阻塞同步模式发出和接收数据。91使用TcpListener类oSystem.Net.Sockets.TcpListeneroTcpListener类用于等待并处理传入TCP请求。一个TcpListener实例侦听一个具体的
40、IP地址和端口号。o有3种方式用于指定IP地址和端口号:n侦听某个特点端口,并使用主机系统的默认接口的IP地址n通过将新的TcpListener对象的端口号指定为0,允许系统分配一个没有被使用的端口号。调用Start方法后,系统分配端口。然后通过LocalEndPoint属性可以判断TcpListener正在侦听哪一个端口。n创建一个IPEndPoint对象,定义TcpListener对象要侦听的端口,然后将这个对象传递给TcpListener的构造函数。92使用TcpClient类o System.Net.Sockets.TcpCliento TcpClient类提供简单易用的方法,通过一个
41、TCP连接发送和拉收数据。o 使用Connect方法建立到一台TCP服务器的连接,或者将远程主机的DNS名称和端口号传递给TcpClient构造函数,在这种情况下,TcpClient对象会尝试将连接作为初始化的一部分。使用GetStream方法返回用于发送和接收消息的网络流。93使用UdpClient类oSystem.Net.Sockets.UdpClientoUdpClient类用于发送和接收UDP数据报。与TcpClient和TcpListener类一样,UdpClient类以“阻塞同步”模式操作,因此当调用Receive方法等待接收数据报时,当前线程的执行阻塞,直到接收到一个数据报。o在
42、发送数据报前无需建立到远程主机的连接。只要创建一个UdpClient实例,然后调用Send方法,并传递远程主机名和端口号(作为一个IPEndPoint实例或作为主机名字符串和端品号整数)oUdpClient可以用于发送和接收多路广播数据报。JoinMulticastGroup方法用于加入一个多路广播组,DropMulticastGroup方法用于退出一个多路广播组。94使用Socket类o Socket构造函数三个重要参数nAddressFamily枚举指定Socket实例用于解析地址的寻址方案,其选项包括AddressFamily.DecNet、.Osi、.NetBios以及最可能用到的指定
43、IP第4版地址的AddressFamily.InterNetwork等。nSocketType枚举指定套接字的类型。其选项包括:用于UDP通信的SocketType.Dgram、用于直接访问底层传输协议的.Raw,以及支持TCP通信所要求的可靠的、基于连接的双向字节流的.StreamnProtocolType枚举指定所需的协议。其选项包括:ProtocolType.Ipx、.IP、.Tcp、.Udp和.Raw。95使用Socket类(续)o 在使用面向连接的协议时,如果你希望应用程序作为服务器并等待传入边接,则首先必须调用Bind方法套接字绑定到一个本地IP地址和端口上,然后调用Listen方
44、法o 对于UDP协议,侦听传入的数据报,调用ReceiveForm方法来接收任何传入数据报,然后调用SendTo方法将数据报发送到远程主机。96使用Socket类(续)o BeginConnect和EndConnect,BeginSend和EndSend,BeginReceive和EndReceive方法使用面向连接的协议处重与客户的异步操作。o BeginSendTo和EndSendTo以及BeginReceiveFrom和EndReceiveFrom通过无连接的协议处理异步操作。o 当底层的Winsock应用程序编程接口报告一个错误时,所有的System.Net.Sockets类都能返回一
45、个SocketException类的异常。97红外通信o IrDAListener和IrDAClient类为红外线通信执行的功能与TcpListener和TcpClient执行TCP通信的功能相同。o IrDA类在System.Net.IrDA.dll中,要使用这两个类,必须向项目中添加一个对这个动态链接库的引用。o 通过调用IrDAClient.DiscoverDevices方法,可以发现哪些设备在红外线网络中。这个方法返回一个IrDADeviceInfo对象数组。98红外通信(续)o 使用IrDAListener侦听红外线连接n广告一个服务并侦听从任何请求该服务的设备发来的连接请求,使用I
46、rDAListener(string)形式的构造函数,传递要求的服务名n要侦听从网络中一个特定的设备发来的连接,创建一个System.Net.IrDAEndPoint实例,并指定设备ID和服务名字符串,再将这个实例传递给IrDAListener构造函数。o 使用IrDAClient建立红外线连接n使用特定的服务器字符串进行连接n调用Connect方法并传递一个指定某个设备的Device ID,以及服务名的IrDAEndPoint实例。然后调用GetStream获取底层的Stream对象。99附录2: WinCE高级编程100Advanced WinCE Programmingo Memory
47、Managemento Windows CE Databaseo Modules, Process, and Threads1011 Memory Managemento RAM, ROM and Virtual Memoryo An Applications Address Space102Windows XP Memory MapSystem Reserved(kernel mode space)0000 00000000 00008000 00008000 0000FFFF FFFFFFFF FFFFApplicationSpace103Windows CE Memory MapSyst
48、em Reserved(kernel mode space)0000 00000000 00000400 00000400 00004200 00004200 00008000 00008000 0000FFFF FFFFFFFF FFFFActive ProcessActive ProcessActive ProcessApplication SpaceReservedLarge Memory Area(memory mapped files)Application Space104Application Memory MapCOREDLL.DLL0000 00000000 00000001
49、 00000001 0000Read only data03FF FFFF03FF FFFFCodeRead write datareservedOther ROM DLLsResourcesStack (reserved space) Heap (reserved space)Free virtual spaceApplication Specific SpaceROM DLL space0200 00000200 0000DLL Space (Constant for all applications)non-ROM DLLs105Application Memory Mapo Appli
50、cation space 64 Megabytesn 32 Meg in 3.0 and beforeo DLLs mapped into upper 32 Megn DLL static data mapped into lower 32 Mego Code, data, and RAM DLL use lower 32 Megn No way for an application to allocate memory above 32 Mego Resource only DLLs are loaded outside the process space106The Different o
51、f the Memory Allocationo Virtual Memoryo Heapso Stacko Static Datao String Resourceso Selecting the Proper Memory Type107.Kernel SpaceLarge Memory Area(memory mapped files)Slot 1Slot 0Slot 2Slot 3 Slot 32 Process 320000 00000000 00000200 00000200 00000400 00000400 00000600 00000600 00000800 00000800
52、 00003E00 00003E00 00004000 00004000 00004200 00004200 00008000 00008000 0000FFFF FFFFFFFF FFFFDLLsProcess 2Process 3Act. Process Slot 31NK “Slot”C200 0000C200 0000System Memory MapResource only DLLsProcess 31108Living In The Boxo Process limit of 32 Meg virtual spaceo Is this a problem?o Where?n Vi
53、rtual allocationsn Large allocations109Virtual Memoryo Max 32 Meg address space per processn You can get around this by using memory mapped objectso Allocated on a page basiso Virtual memory reserved on 64K boundariesn Reserve large blocks then commit later110Limited Virtual Memory Spaceo Applicatio
54、ns need to consider their limited virtual memoryn NT applications have 2 Gigabytesn CE applications have only 32 Megabyteso Remember: virtual memory is reserved on 64K boundariesint i;PBYTE pMem512;for (i = 0; i 512; i+) pMemi = (PBYTE)VirtualAlloc (0, 1024, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE)
55、;111Limited Virtual Memory Spaceo Solutions:n Reserve virtual memory in large amounts.o then commit(提交) later as neededn Or, use memory mapped objectsint i;PBYTE pBase, pMem512;/ Reserve the block firstpBase = (PBYTE)VirtualAlloc (0, 512*PAGESIZE, MEM_RESERVE, PAGE_READWRITE);/ Commit the pages late
56、rfor (i = 0; i 2 Megbytes) VirtualAlloc callsn Space is allocated outside of the 32 Meg boxo Same “shared” space used by memory mapped objectsn Block is not protected from other appso Allocations must be reserved first then committed later113Large Virtual Allocations0000 00000000 00000400 00000400 0
57、0004200 00004200 00008000 00008000 0000FFFF FFFFFFFF FFFFActive ProcessLarge Memory AreaApplication SpaceApplication SpaceLarge VAllocs go here1142 WinCE Databaseso WinCE supports a unique database API for storing and organizing data in the system.o Basic Definitionsn Database is composed of series
58、of records.n Records can contain any number of properties.o WinCE gives you a basic database functionality that helps applications organize simple data structures.115WinCE DataBaseo The Databases APIn Mounting a Database Volume:o CeMountDBVoln Unmounting a Database Volume:o CeUnmountDBVoln Enumerati
59、ng Mounted Database Volumeso CeEnumDBVolumesn Using Object Store as Database Volumeo CREATE_SYSTEMGUID (PCEGUID pguid)116WinCE Database APIsn Creating Databaseo CeCreateDatabaseEx2n Opening a Databaseo CeOpenDatabaseEx2n Seeking or Searching for a Recordo CeSeekDatabaseExn Changing the Sort Ordero C
60、eSetDataBaseInfoEx2n Reading a Recordo CeReadRecordpropsEx117WinCE Database APIsn Writing a Recordo CeWriteRecordPropsn Deleting Properties, Records and Entire Databaseo CeDeleteRecordo CeDeleteDatabaseExn Enumerating Databaseso CeFindFirstDatabaseExo CeFindNextDatabaseExn Querying Object Informationo CeOidGetInfo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国水泥管等制品行业市场前景预测及投资价值评估分析报告
- 2026年中国螺旋输送泵行业市场前景预测及投资价值评估分析报告
- 2026年中国伺服液压振动台行业市场规模及投资前景预测分析报告
- 2025石家庄高新区招聘社区工作者73名笔试考试参考试题及答案解析
- 2026年云南云天化股份有限公司秋季招聘(185人)笔试考试参考题库及答案解析
- 2025年仁寿县从“三支一扶”计划人员中公开考核招聘乡镇事业单位工作人员考试笔试模拟试题及答案解析
- 员工手册培训幻灯片
- 肾囊肿超声监测方案
- 2025年墓碑安装合同违约责任协议
- 2025年克拉玛依fjc项目材料供应合同协议
- 2025中国家庭教育服务行业发展现状及未来趋势报告
- 2025年无线电广播接收设备行业分析报告及未来发展趋势预测
- 江苏省徐州市云龙区2024-2025学年六年级上学期语文期中试卷(含答案)
- 2mm土工膜长丝土工布检测报告合格证
- 乳腺癌患者的术后护理
- 企业注销申请书模板
- 农业田间机器人课件
- 旅游政策与法规案例分析题
- 新版物业交割单
- 《汽车运用基础》考试复习题库及答案
- 人教版八年级上册数学全册单元测试卷
评论
0/150
提交评论