第十五章WindowsCENET應(yīng)用開(kāi)發(fā)_第1頁(yè)
第十五章WindowsCENET應(yīng)用開(kāi)發(fā)_第2頁(yè)
第十五章WindowsCENET應(yīng)用開(kāi)發(fā)_第3頁(yè)
第十五章WindowsCENET應(yīng)用開(kāi)發(fā)_第4頁(yè)
第十五章WindowsCENET應(yīng)用開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩183頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1第十五章 Windows CE.NET應(yīng)用開(kāi)發(fā)15.1 應(yīng)用開(kāi)發(fā)概述 15.2 Windows CE的應(yīng)用編程接口 15.3 Windows CE應(yīng)用開(kāi)發(fā)工具 15.4 eMbedded Visual C+ 4.0應(yīng)用開(kāi)發(fā)概述 15.5 Windows CE通信開(kāi)發(fā)實(shí)例附錄1: .NET Compact Framework開(kāi)發(fā)附錄2: WinCE高級(jí)編程附錄3:應(yīng)用程序開(kāi)發(fā)實(shí)例215.1 應(yīng)用開(kāi)發(fā)概述315.1.1 Windows CE應(yīng)用程序開(kāi)發(fā)流程 o 開(kāi)發(fā)環(huán)境的搭建o 應(yīng)用程序代碼的編寫(xiě)和調(diào)試o 應(yīng)用程序的發(fā)布 4應(yīng)用開(kāi)發(fā)流程 515.1.2 Windows CE編程特性 o CE不能

2、運(yùn)行現(xiàn)有的桌面應(yīng)用程序 o 內(nèi)存管理 o 電源管理 o 用戶界面 615.1.3 Windows CE編程基礎(chǔ) o 1. Windows 消息處理機(jī)制 72. Unicode o 使用Unicode進(jìn)行應(yīng)用程序開(kāi)發(fā)可以滿足產(chǎn)品國(guó)際化的要求,也可以很容易地在不同語(yǔ)言之間進(jìn)行數(shù)據(jù)交換,使開(kāi)發(fā)者能夠自由分配支持所有語(yǔ)言的單個(gè)二進(jìn)制.exe文件或.dll文件,同時(shí)提高應(yīng)用程序的運(yùn)行效率。o Windows CE規(guī)定,所有的字符串必須采用Unicode類(lèi)型而不是char類(lèi)型聲明,程序中的所有文本文字必須是Unicode字符串,同時(shí),必須為Unicode字符串選擇正確的運(yùn)行庫(kù)函數(shù)。 83. 文件I/O o

3、 與桌面Windows相比較,Windows CE沒(méi)有當(dāng)前目錄的概念,所有的文件名和路徑都必須以“”開(kāi)始使用完整的路徑名,文件名必須是Unicode。o 在讀寫(xiě)一個(gè)文件時(shí),應(yīng)用程序使用內(nèi)存映射的I/O代替使用緩沖的I/O。94. 內(nèi)存要求 o 基于嵌入式系統(tǒng)的特征,應(yīng)用程序必須是低內(nèi)存要求,應(yīng)用程序必須保存靜態(tài)變量的大小和數(shù)量為最小,必須保持較小的EXE文件,隨時(shí)檢查內(nèi)存分配的返回值,集中分配應(yīng)用程序的內(nèi)存,并且處理WM_HIBERNATE消息。 1015.2 Windows CE的應(yīng)用編程接口11Windows CE的應(yīng)用編程接口o Windows CE .NET 應(yīng)用程序開(kāi)發(fā)人員目前有三種

4、API可以選擇,它們分別是:n Win32 API(應(yīng)用程序接口)n MFC(微軟開(kāi)發(fā)類(lèi)庫(kù))與ATL(活動(dòng)模板庫(kù),它主要用于創(chuàng)建 COM 組件、Web 服務(wù)和 Microsoft ActiveX 控件)n Microsoft .NET Framework 精簡(jiǎn)版。 1215.2.1 Win32 API o Win32應(yīng)用編程接口的目的是提供了一個(gè)常用的界面的設(shè)置,但不同的平臺(tái)由于不同的特性及硬件的約束,其部分應(yīng)用編程接口也不同 o Windows CE.NET API函數(shù)從用途上主要分為下列幾大類(lèi):n 服務(wù)性應(yīng)用、最終用戶、核心操作系統(tǒng)服務(wù)、通信和網(wǎng)絡(luò)、文件系統(tǒng)和數(shù)據(jù)存儲(chǔ)、字體、硬件支持、國(guó)際

5、化、Internet客戶端、多媒體、安全、外殼。 13Win32程序模型 o Windows CE的Win32 API具有一些獨(dú)有的特征:n 它比其他的32位的Windows操作系統(tǒng)的Win32 API要小,它只包括大約相當(dāng)于Windows NT的半數(shù)的API;n 它能夠在操作系統(tǒng)的層次,而不是在應(yīng)用程序的層次上處理通知事件(如時(shí)鐘);n 觸摸屏的APIn 對(duì)數(shù)據(jù)庫(kù)的內(nèi)置的支持n 高度的模塊化1415.2.2 MFC o MFC是一個(gè)基于C語(yǔ)言的面向?qū)ο蟮某绦蛟O(shè)計(jì)框架,它大大簡(jiǎn)化了Windows的編程工作 o 同桌面Windows 的MFC庫(kù)相比較,Windows CE.NET的MFC庫(kù)在包含

6、的C+類(lèi)方面有所不同 1515.2.3 ATL o Windows CE提供了對(duì)ATL的支持,ATL是ActiveX Template Library的縮寫(xiě),它是一套C模板庫(kù),利用它可以開(kāi)發(fā)出體積更小、速度更快的控件,對(duì)于COM組件的開(kāi)發(fā),它提供了最大限度的代碼自動(dòng)生成以及可視化支持。o Windows CE所支持的ATL是桌面Windows中ATL的一個(gè)子集o ATL主要在應(yīng)用層上支持基于COM組件技術(shù)的OLE2和 ActiveX 1615.2.4 .NET Compact Framework o Win32 函數(shù)基本上是分散在一組動(dòng)態(tài)鏈接庫(kù) (DLL) 中,所有函數(shù)都被保存在文件、庫(kù)文件或

7、者DLL當(dāng)中。要找到某個(gè)函數(shù),必須非常清楚包含該函數(shù)的文件或者DLL,這是很費(fèi)勁的一種工作。 o .NET Framework 是一種專(zhuān)門(mén)為易于使用而設(shè)計(jì)的面向?qū)ο蟮?API。.NET API 的用戶界面經(jīng)過(guò)了精心設(shè)計(jì),是“可發(fā)現(xiàn)的”,其目的是:一旦開(kāi)發(fā)者了解了基礎(chǔ)知識(shí),就非常容易進(jìn)行編程。 17.NET Compact Framework o Microsoft .NET Framework 精簡(jiǎn)版(.NET Compact Framework)是一種用于Microsoft Windows CE .NET和Microsoft Windows for Pocket PC的新型應(yīng)用程序編程接口

8、(API)o 它為程序員提供了兩種編程語(yǔ)言選擇:n一個(gè)是Microsoft Visual Basic 的兼容 .NET 的版本,稱(chēng)為 Visual Basic .NET;n另一個(gè)是Microsoft Visual C#,這是專(zhuān)門(mén)為 Microsoft .NET 開(kāi)發(fā)的 C 和 C+ 語(yǔ)言家族中的一個(gè)新成員。 18.NET Compact Frameworko 通過(guò)Platform Builder,開(kāi)發(fā)者能夠?yàn)樘囟繕?biāo)硬件配置和生成 Windows CE 映像。所有映像都是從以下兩種基本配置生成的:n無(wú)頭 (HLBASE) 配置n基于顯示器 (IABASE) 的配置。o 盡管每種配置都可修改成與

9、另一種相似,但較適合 Framework 精簡(jiǎn)版的一種是 IABASE,因?yàn)?NET Framework 精簡(jiǎn)版主要是用來(lái)構(gòu)建 GUI 應(yīng)用程序。 19Windows CE .NET Platform Builder 的典型配置類(lèi)型 無(wú)頭無(wú)頭 (HLBASE) 配置配置基于顯示器基于顯示器 (IABASE) 的配置的配置媒體工具媒體工具移動(dòng)電話或智能電話移動(dòng)電話或智能電話?cǎi)v留網(wǎng)關(guān)駐留網(wǎng)關(guān)數(shù)字圖像處理設(shè)備數(shù)字圖像處理設(shè)備微內(nèi)核微內(nèi)核工業(yè)自動(dòng)化設(shè)備工業(yè)自動(dòng)化設(shè)備 Internet 工具工具 PDA 或移動(dòng)手持設(shè)備或移動(dòng)手持設(shè)備 零售點(diǎn)設(shè)備零售點(diǎn)設(shè)備 機(jī)頂盒機(jī)頂盒 Web 鍵盤(pán)鍵盤(pán) Windows

10、瘦客戶端瘦客戶端2015.2.5 各種編程接口的比較 o 資源占用方面 o 程序運(yùn)行大小方面 2115.3 Windows CE應(yīng)用開(kāi)發(fā)工具2215.3.1 Windows CE應(yīng)用程序開(kāi)發(fā)的選擇 o Windows CE應(yīng)用程序開(kāi)發(fā),代碼的選擇主要有兩種:n托管代碼:是指使用.NET Compact Framework開(kāi)發(fā)的程序代碼,可執(zhí)行文件被編譯成MSIL,執(zhí)行時(shí)需要有.NET的運(yùn)行時(shí)環(huán)境。托管代碼的典型例子就是Visual Basic .NET和 C# .NET。n本地代碼:也稱(chēng)為非托管代碼,是指使用C+等高級(jí)語(yǔ)言開(kāi)發(fā)的程序代碼,可執(zhí)行文件被編譯成與CPU指令集有關(guān)的機(jī)器碼,可以直接運(yùn)

11、行。由eMbedded Visual C+ 開(kāi)發(fā)出來(lái)的代碼就是本地代碼。 23托管代碼特征 o 托管代碼是可移植代碼,這是因?yàn)?NET的可執(zhí)行程序能夠運(yùn)行在任何已經(jīng)安裝了相應(yīng)的通用語(yǔ)言運(yùn)行時(shí)(CLR)的平臺(tái)上,而不管是哪種CPU。o 托管代碼也是安全代碼,因?yàn)樗幸徽滋匦詠?lái)避免令人煩惱的非托管代碼中存在的問(wèn)題,例如隱式指針,可以消除內(nèi)存泄漏的自動(dòng)內(nèi)存管理和防止內(nèi)存越界的數(shù)組邊界保護(hù)。o 我們有時(shí)也稱(chēng)托管代碼為“.NET代碼”,因?yàn)橥泄艽a直接依賴(lài)于.NET精簡(jiǎn)框架中提供的編程接口。 24本地代碼的特征 o 本地代碼之所以被稱(chēng)為“Native”,是因?yàn)樯傻目蓤?zhí)行文件格式不是可移植的CIL格式

12、,而是本地的處理器指令集,如SH3或者StrongARM處理器。o 同時(shí),本地代碼也被稱(chēng)作非安全的代碼(Unsafe code),因?yàn)樗鄙賹?duì)內(nèi)存泄漏、“壞”指針和數(shù)組越界的保護(hù)機(jī)制,而這些機(jī)制都在通用語(yǔ)言運(yùn)行時(shí)中已被提供。 25托管代碼和本地代碼的區(qū)別 o 本地代碼主要針對(duì)于Native 應(yīng)用 o 托管代碼主要針對(duì)于.NET應(yīng)用 26托管代碼的編譯和運(yùn)行過(guò)程 2715.3.2 Windows CE應(yīng)用程序開(kāi)發(fā)工具概述 o 在開(kāi)發(fā)Windows CE應(yīng)用程序時(shí),我們可以選擇的工具包括以下三種:neMbedded Visual C+ 4.0:nVisual Studio .NET 2003nVi

13、sual Studio 2005o 一般來(lái)說(shuō),程序員可以使用 Visual Studio .NET 2003或者Visual Studio 2005來(lái)創(chuàng)建針對(duì) .NET Framework 精簡(jiǎn)版的應(yīng)用程序,可以使用eMbedded Visual C+ 4.0或者Visual Studio 2005創(chuàng)建應(yīng)用程序。 28開(kāi)發(fā)模型的演變 o Windows CE 4.x開(kāi)發(fā)模型 29o Windows CE 5.x開(kāi)發(fā)模型 3015.3.3 EVC集成開(kāi)發(fā)環(huán)境 o 多數(shù)程序員的最佳選擇仍然是eMbedded Visual C+,因?yàn)榍度胧较到y(tǒng)資源有限,C+編譯器效率高、性能好,編譯出的應(yīng)用程序結(jié)構(gòu)

14、緊湊 311. EVC概述 o 隨著Windows CE版本變化,eVC也推出了相應(yīng)的版本。其對(duì)應(yīng)關(guān)系如下表 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)包含了一個(gè)特定平臺(tái)的所有函數(shù)。o 在使用eVC進(jìn)行開(kāi)發(fā)前,必須安裝特定平臺(tái)的SDK,而且進(jìn)行開(kāi)發(fā)時(shí)必須了解特定平臺(tái)支持的函數(shù),在SDK中不包括的函數(shù)不能使用。 o Microsoft提供了一些S

15、DK,如Standard SDK、Pocket PC2003、SmartPhone2003等等。 33SDK的導(dǎo)出o如果使用 eVC針對(duì)某一特定硬件平臺(tái)進(jìn)行開(kāi)發(fā),那就要從Platform Builder導(dǎo)出特定平臺(tái)的SDK,然后安裝SDK。o導(dǎo)出的SDK是一個(gè)Windows安裝程序(.msi文件),SDK的內(nèi)容取決于包含在平臺(tái)中的操作系統(tǒng)配置、運(yùn)行時(shí)庫(kù)、OAL(OEM Adaption Layer)、和設(shè)備驅(qū)動(dòng)程序。 34(2)EVC集成開(kāi)發(fā)環(huán)境 o在Windows CE下開(kāi)發(fā)軟件的編譯器必須滿足兩個(gè)特點(diǎn):第一、程序能夠相對(duì)快速地執(zhí)行;第二、相對(duì)減少對(duì)系統(tǒng)資源的消耗。EVC是最符合這兩個(gè)特點(diǎn)的

16、. 35EVC集成開(kāi)發(fā)環(huán)境o EVC集成開(kāi)發(fā)環(huán)境包括以下內(nèi)容:n編譯器:包含c/c+編譯器。n模擬器:一個(gè)運(yùn)行在CPU Ring 3 級(jí)別的用戶程序。n平臺(tái)管理器:能夠?qū)⒕幾g的程序下載到指定的平臺(tái)上。n調(diào)試器:能夠單步執(zhí)行程序和設(shè)置斷點(diǎn)。n工作區(qū):包含類(lèi)視圖、資源視圖、文件視圖。n代碼編輯區(qū):也就是文本編輯器。n類(lèi)向?qū)Ш蛻?yīng)用程序向?qū)?。n遠(yuǎn)程調(diào)試工具。n幫助文檔和在線幫助。 36EVC 與VC的區(qū)別 o EVC編譯器支持多種嵌入式CPU,支持多種指令集。VC只支持X86指令集。o 為了能在開(kāi)發(fā)機(jī)上調(diào)試,EVC包含一個(gè)模擬器,而VC不具備,也不需要。o EVC包含遠(yuǎn)程調(diào)試工具,而VC只包含本地調(diào)試

17、工具。o 隨EVC安裝附帶的SDK內(nèi)容非常少,必須安裝Windows CE.NET才能得到全部的SDK。隨VC附帶的SDK則包含全部的內(nèi)容。 372. EVC集成開(kāi)發(fā)環(huán)境的重要工具 o (1)模擬器 38o (2)平臺(tái)管理器Platform Manager 39o (3)EVC遠(yuǎn)程工具 工具名稱(chēng)工具名稱(chēng)描述描述Remote File Viewer在在Desktop PC上查詢和管理遠(yuǎn)程設(shè)備中的文件上查詢和管理遠(yuǎn)程設(shè)備中的文件Remote Process Viewer在在Desktop PC上瀏覽遠(yuǎn)程設(shè)備上運(yùn)行的進(jìn)程以及線程,上瀏覽遠(yuǎn)程設(shè)備上運(yùn)行的進(jìn)程以及線程,同時(shí)可以終止指定的進(jìn)程同時(shí)可以終止

18、指定的進(jìn)程Remote Zoomin抓取遠(yuǎn)程設(shè)備上的屏幕圖像抓取遠(yuǎn)程設(shè)備上的屏幕圖像Remote Registy Editor在在Desktop PC上管理遠(yuǎn)程設(shè)備注冊(cè)表上管理遠(yuǎn)程設(shè)備注冊(cè)表Remote Heap Walker顯示在遠(yuǎn)程目標(biāo)設(shè)備上運(yùn)行的進(jìn)程、堆標(biāo)識(shí)符和標(biāo)志顯示在遠(yuǎn)程目標(biāo)設(shè)備上運(yùn)行的進(jìn)程、堆標(biāo)識(shí)符和標(biāo)志位信息位信息Remote Spy+在在Desktop PC上顯示遠(yuǎn)程設(shè)備上運(yùn)行的窗口列表和窗上顯示遠(yuǎn)程設(shè)備上運(yùn)行的窗口列表和窗口消息口消息4015.3.4 Visual Studio.NET工具 o Visual Studio是Windows平臺(tái)下的應(yīng)用程序集成開(kāi)發(fā)環(huán)境,它是一個(gè)強(qiáng)

19、大的可自定義編程系統(tǒng),可以利用它所包含的各種工具快速有效地開(kāi)發(fā)功能強(qiáng)大的Windows應(yīng)用程序、Web應(yīng)用程序和移動(dòng)設(shè)備應(yīng)用程序。 411. 編程語(yǔ)言 o 在Visual Studio.NET中,編程語(yǔ)言分為兩種:n (1)C#n (2)Visual Basic .NET422. SDE o 智能設(shè)備擴(kuò)展(Smart Device Extension ,SDE)是一個(gè)Visual Studio集成包(Visual Studio Integration Package ,VSIP),它是Visual Studio.NET的插件。與eMbedded Visual Tools工具不同,它不能單獨(dú)運(yùn)行

20、,而必須安裝Visual Studio.NET后才能使用。o 在SDE中,包含了一系列預(yù)建的設(shè)備模型以及設(shè)備開(kāi)發(fā)包,可以幫助開(kāi)發(fā)人員針對(duì)特定目標(biāo)設(shè)備開(kāi)發(fā)特定的應(yīng)用。SDE允許直接寫(xiě)應(yīng)用程序到Windows CE.NET設(shè)備或仿真器,并且可以為嵌入式設(shè)備定制Visual Studio.NET開(kāi)發(fā)環(huán)境。 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”;/設(shè)置表單頭o 控件:nButton b = new Button();nf.Controls.Add(b);/將按鈕控件添加到表單中o 時(shí)鐘:nTimer t = new Timer();nt.Interval = 1000 ; /設(shè)置時(shí)間間隔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編程實(shí)例o 建立DataSet的過(guò)程 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開(kāi)發(fā)軟件的依賴(lài)關(guān)系 5115.4 eMbedded Visual C+ 4.0應(yīng)用開(kāi)發(fā)概述5215.4.1 MFC應(yīng)用程序的建立 53建立一個(gè)MFC 應(yīng)用程序 54設(shè)置用

24、戶界面特性 55選擇使用MFC庫(kù) 56類(lèi)和文件名 5715.5 Windows CE通信開(kāi)發(fā)實(shí)例5815.5.1 Windows CE串行通信原理 oS3C2410 處理器的串行口有3 個(gè),分別是UART0,UART1 和UART2。oUART 異步串行I /O 方式是將傳輸數(shù)據(jù)的每個(gè)字符一位接一位(例如先低位、后高位)地傳送,其原理如圖 5915.5.2 功能描述 o實(shí)現(xiàn)Windows CE 上一個(gè)超級(jí)終端程序,這個(gè)程序會(huì)調(diào)用底層驅(qū)動(dòng)并抓取數(shù)據(jù)流。 o在主編輯框中將顯示從串口模塊(GPS/GPRS)中發(fā)送上來(lái)的字符串。在Send 左邊的編輯框中顯示即將發(fā)送的字符串,在Status 左邊的編輯

25、框中顯示讀寫(xiě)狀態(tài)和其他信息。Open 用來(lái)打開(kāi)已選擇好的COM,Clear 用來(lái)清除當(dāng)前主編輯框中的字符串。 6015.5.3 關(guān)鍵代碼分析 o 在這個(gè)實(shí)例中,主要涉及到對(duì)串行端口的讀寫(xiě)操作。串行端口的本質(zhì)功能是作為CPU 和串行設(shè)備間的編碼轉(zhuǎn)換器。o 當(dāng)數(shù)據(jù)從 CPU 經(jīng)過(guò)串行端口發(fā)送出去時(shí),字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位。在接收數(shù)據(jù)時(shí),串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。o 在Windows CE 環(huán)境(包括桌面Windows)下,串口是系統(tǒng)資源的一部分。應(yīng)用程序要使用串口進(jìn)行通信,必須在使用之前向操作系統(tǒng)提出資源申請(qǐng)要求(打開(kāi)串口),通信完成后必須釋放資源(關(guān)閉串口)。o 需要格外注意的是,在Window

26、s CE.net 中使用的編碼方式都是Unicode,因此對(duì)于串口字符的顯示,存在編碼顯示的問(wèn)題,即我們常說(shuō)的ANSI code 到Unicode 的轉(zhuǎn)化問(wèn)題 61關(guān)鍵代碼 o 打開(kāi)串口 nhSerial = CreateFile(LCOM1:,nGENERIC_READ | GENERIC_WRITE,n0,nNULL,nOPEN_EXISTING,n0,nNULL);nif(m_hSerial = NULL)n return;n62o 關(guān)閉串口 n if(hSerial != NULL)n n CloseHandle(hSerial);n hSerial = NULL;n 63o 寫(xiě)串口

27、n WriteFile (hSerial, / 設(shè)備句柄n &Byte, / 數(shù)據(jù)緩沖區(qū)地址n nByte, / 數(shù)據(jù)大小n &dwNumBytes, / 返回發(fā)送出去的字節(jié)數(shù)n NULL / 不支持重疊n );64o 讀串口 n ReadFile(hSerial,/設(shè)備句柄n &ch, /讀緩沖區(qū)地址n &chBytes,/返回接收的字節(jié)數(shù)n NULL /不支持重疊n );65o 轉(zhuǎn)換操作 n MultiByteToWideChar n WideCharToMultiByte 6615.5.4 源代碼剖析 o 讀線程 67o 寫(xiě)線程 68End of Chap

28、ter156970附錄1: .NET Compact Framework開(kāi)發(fā)711. 開(kāi)發(fā)Windows窗體應(yīng)用程序o Windows窗體控件介紹n 可用控件n 控件創(chuàng)建n 控件成員n 控件支持的行為o 示例o 調(diào)試o 完成和分發(fā)應(yīng)用程序72Supported ControlsButtonCheckBoxCombooxContextMenuDataGridDomainUpDownFileOpenDialogo Supported controlsHScrollBarImageListLabelListBoxListViewFileSaveDialog MainMenuNumericUpDown

29、PanelPictureBoxProgressBarRadioButtonGroupBoxRichTextBoxNotificationBubblePrint ControlsStatusBarTabControlTextBoxTimerToolBarTreeViewVScrollBaro Unsupported controls o Unsupported controls not available in CECheckedListBoxColorDialogErrorProviderHelpProviderLinkLabelNotifyIconToolTipSplitterFontDia

30、log73完成和分發(fā)應(yīng)用程序o 選擇項(xiàng)目設(shè)置o 對(duì)應(yīng)用程序進(jìn)行打包o 分發(fā)應(yīng)用程序74選擇項(xiàng)目設(shè)置o 使用文件的Build Action屬性o 將一個(gè)圖標(biāo)關(guān)聯(lián)到應(yīng)用程序o 設(shè)置部署目錄o 應(yīng)用程序私有程序集的優(yōu)點(diǎn)75對(duì)應(yīng)用程序進(jìn)行打包o 創(chuàng)建針對(duì)處理器的CAB文件o 使用Visual Studio .NET生成CAB文件o 使用CAB向?qū)蒀AB文件o 使用資源文件生成器o 配置文件76分發(fā)應(yīng)用程序o 安裝.NET Compact Frameworko 從一個(gè)Web站點(diǎn)進(jìn)行部署o 從一個(gè)文件共享進(jìn)行部署o 從另外的設(shè)備進(jìn)行部署o 使用內(nèi)存存儲(chǔ)卡進(jìn)行部署o 通過(guò)ActiveSync進(jìn)行部署o

31、使用Trickle-Feed部署o 將程序集安裝到全局程序集緩存中772. SQL Server CE及ADO.NET的使用o ADO.NET中的數(shù)據(jù)對(duì)象o 與SQL SERVER CE集成使用78ADO.NET architecture 79SQL Server CE的使用o 對(duì)SQL Server CE進(jìn)行編程有3個(gè)不同的階段:n 創(chuàng)建本地SQL Server CE數(shù)據(jù)庫(kù)n 更新本地?cái)?shù)據(jù)n 將在本地更改的數(shù)據(jù)合并回中央數(shù)據(jù)庫(kù)80SqlServerCe數(shù)據(jù)編程對(duì)象o 用代碼創(chuàng)建本地?cái)?shù)據(jù)庫(kù)n 創(chuàng)建一個(gè)SqlCeEngine對(duì)象n 通過(guò)連接這個(gè)新的數(shù)據(jù)庫(kù)再執(zhí)行一些SQL DDL指令來(lái)向數(shù)據(jù)庫(kù)中添

32、加一些數(shù)據(jù)表o 用SQL添加數(shù)據(jù)n 可以使用SqlCeCommand對(duì)象來(lái)對(duì)本地?cái)?shù)據(jù)庫(kù)執(zhí)行SQL DML指令81SqlServerCe數(shù)據(jù)編程對(duì)象(續(xù))o 檢索數(shù)據(jù)行n使用SqlCeDataReader類(lèi)o SqlCeDataReader對(duì)象需要一個(gè)帶有某些SQL命令的SqlCeCommand對(duì)象,這個(gè)命令通過(guò)一個(gè)連接到SQL Server CE數(shù)據(jù)庫(kù)的SqlCeConnect對(duì)象來(lái)選擇各個(gè)行,然后可以對(duì)SqlCeCommand調(diào)用ExecuteReader方法來(lái)創(chuàng)建SqlCeDataReader對(duì)象。n使用Dataset及數(shù)據(jù)綁定o 當(dāng)Dataset以這種方式獲得了數(shù)據(jù)之后,就可以使用數(shù)據(jù)綁

33、定在控件中顯示及更新數(shù)據(jù)。SqlCeDataAdapter對(duì)象能夠向Dataset對(duì)象填充數(shù)據(jù)并且再對(duì)底層數(shù)據(jù)庫(kù)的任何變動(dòng)進(jìn)行更新。n在帶有參數(shù)的情況下使用SqlCeCommand對(duì)象823. I/O系統(tǒng)o FileStreamo MemoryStreamo NetworkStreamo StreamReadero StreamWriter83FileStreamo FileStream對(duì)象的構(gòu)造函數(shù)有多種重載方式,但是它至少要求作為字符串的文件名和一個(gè)FileMode枚舉值作為參數(shù)o Stream的構(gòu)造函數(shù)有接受FileAccess枚舉參數(shù)的重載,這些枚舉參數(shù)指定打開(kāi)文件進(jìn)行讀取還是寫(xiě)入操作

34、,或者同時(shí)進(jìn)行兩種操作o 打開(kāi)或創(chuàng)建一個(gè)文件時(shí),可以為構(gòu)造函數(shù)傳遞一個(gè)FileShare枚舉成員,說(shuō)明該文件與其他使用者之間的共享方式。o 使用FileStream的ReadByte方法以字節(jié)方式讀取文件84FileStream(contd)o BinaryReader和BinaryWriter類(lèi)允許直接從流中讀取基元數(shù)據(jù)類(lèi)型或者將其寫(xiě)入流中,而無(wú)需執(zhí)行與字符之間的轉(zhuǎn)換操作。o Seek方法改變讀取或者寫(xiě)入指針在流中的位置o .NET Framework完整版使用的FileStream對(duì)象的Lock和Unlock方法對(duì)文件內(nèi)的區(qū)域進(jìn)行鎖定,而在.NET Compact Framework中不支

35、持這兩個(gè)方法。85MemoryStreamo MemoryStream對(duì)象可以想像為沒(méi)有目標(biāo)設(shè)備的流,而是內(nèi)存中的一個(gè)字節(jié)緩沖區(qū)。o 可以進(jìn)行讀取或?qū)懭氩僮鳎部杉催M(jìn)行讀取操作又進(jìn)行寫(xiě)入操作。o 構(gòu)造對(duì)象時(shí),可以指定自已的字節(jié)數(shù)組緩沖區(qū),或是讓.NET Compact Framework運(yùn)行庫(kù)代為分配和管理一個(gè)緩沖區(qū)o 通過(guò)使用Read、ReadByte、Write和WriteByte等方法,可以執(zhí)行低級(jí)別的讀取與寫(xiě)入操作。86NetworkStreamo 構(gòu)造NetworkStream對(duì)象,首先需要?jiǎng)?chuàng)建流需要使用的套接字,然后將這個(gè)套接字作為參數(shù)傳遞給NetworkStream的構(gòu)造函數(shù)。o

36、 為了預(yù)防網(wǎng)絡(luò)錯(cuò)誤,就很有必要將讀取或者寫(xiě)入操作放在try/catch中,以捕獲在網(wǎng)絡(luò)連接斷開(kāi)時(shí)導(dǎo)致的IOException類(lèi)型的導(dǎo)常.o 要執(zhí)行異步讀取操作,使用BeginRead方法。BeginRead啟動(dòng)從流中讀取字節(jié)的操作,返回一個(gè)IAsyncResult對(duì)象,此對(duì)象必須被傳遞給稍后調(diào)用的EndRead方法以便正確地結(jié)束讀取操作。87StreamReader與StreamWritero StreamReader和StreamWriter類(lèi)從TextReader和TextWriter抽象派生而來(lái)。它們使用流執(zhí)行字符的輸入和輸出,并使用某種編碼方式將字符翻譯成字節(jié)、將字節(jié)翻譯成字符,使底層

37、的流可以被讀取或者寫(xiě)入。o SteamReader和StreamWriter類(lèi)的各種構(gòu)造函數(shù)接受任何類(lèi)型的Stream對(duì)象:FileStream,MemoryStream和NetworkStream;而且接受純文件名作為參數(shù),并默認(rèn)的創(chuàng)建相關(guān)的FileStream對(duì)象。88StreamReader與StreamWriter(續(xù))o 通過(guò)使用FileSteam類(lèi)的Read方法的一個(gè)重載從流中檢索單個(gè)字符或者成組的字符,可以使用StreamReader對(duì)象在一個(gè)FileStream對(duì)象上執(zhí)行字符讀取操作,不接受任何參數(shù)的Read方法返回一個(gè)整數(shù),表示讀取的字符的數(shù)值編碼值,或者返回-1表示文件尾。

38、o StreamReader和StreamWriter對(duì)象使用某種編碼方式讀取和寫(xiě)入文件。要構(gòu)造使用特定的編碼方式的StreamReader或StreamWriter對(duì)象,使用一個(gè)重載,這個(gè)重載用一個(gè)System.Text.Encoding屬性來(lái)指定編碼方式。89StreamReader與StreamWriter(續(xù))o 當(dāng)使用Unicode編碼時(shí),字符可以按照l(shuí)ittle-endian或big-endian字節(jié)順序存儲(chǔ)。默認(rèn)的字節(jié)順序是little-endian。如果生成Uncode文件需要在big-endian平臺(tái)上讀取,可以使用Encoding.BigEndianUncode枚舉。o 寫(xiě)

39、入文件時(shí),可以先創(chuàng)建一個(gè)StreamWriter對(duì)象,然后將希望寫(xiě)入的FileStream對(duì)象作為參數(shù)傳遞給它。904. 網(wǎng)絡(luò)編程o System.Net.Sockets命名空間為.NET Framework提供了Winsock的托管實(shí)現(xiàn).o System.Net.Sockets命名空間有TcpListener和TcpClient類(lèi),其中包含了執(zhí)行這類(lèi)事務(wù)的簡(jiǎn)單方法。這些類(lèi)以阻塞同步模式發(fā)出和接收數(shù)據(jù)。91使用TcpListener類(lèi)oSystem.Net.Sockets.TcpListeneroTcpListener類(lèi)用于等待并處理傳入TCP請(qǐng)求。一個(gè)TcpListener實(shí)例偵聽(tīng)一個(gè)具體的

40、IP地址和端口號(hào)。o有3種方式用于指定IP地址和端口號(hào):n偵聽(tīng)某個(gè)特點(diǎn)端口,并使用主機(jī)系統(tǒng)的默認(rèn)接口的IP地址n通過(guò)將新的TcpListener對(duì)象的端口號(hào)指定為0,允許系統(tǒng)分配一個(gè)沒(méi)有被使用的端口號(hào)。調(diào)用Start方法后,系統(tǒng)分配端口。然后通過(guò)LocalEndPoint屬性可以判斷TcpListener正在偵聽(tīng)哪一個(gè)端口。n創(chuàng)建一個(gè)IPEndPoint對(duì)象,定義TcpListener對(duì)象要偵聽(tīng)的端口,然后將這個(gè)對(duì)象傳遞給TcpListener的構(gòu)造函數(shù)。92使用TcpClient類(lèi)o System.Net.Sockets.TcpCliento TcpClient類(lèi)提供簡(jiǎn)單易用的方法,通過(guò)一個(gè)

41、TCP連接發(fā)送和拉收數(shù)據(jù)。o 使用Connect方法建立到一臺(tái)TCP服務(wù)器的連接,或者將遠(yuǎn)程主機(jī)的DNS名稱(chēng)和端口號(hào)傳遞給TcpClient構(gòu)造函數(shù),在這種情況下,TcpClient對(duì)象會(huì)嘗試將連接作為初始化的一部分。使用GetStream方法返回用于發(fā)送和接收消息的網(wǎng)絡(luò)流。93使用UdpClient類(lèi)oSystem.Net.Sockets.UdpClientoUdpClient類(lèi)用于發(fā)送和接收UDP數(shù)據(jù)報(bào)。與TcpClient和TcpListener類(lèi)一樣,UdpClient類(lèi)以“阻塞同步”模式操作,因此當(dāng)調(diào)用Receive方法等待接收數(shù)據(jù)報(bào)時(shí),當(dāng)前線程的執(zhí)行阻塞,直到接收到一個(gè)數(shù)據(jù)報(bào)。o在

42、發(fā)送數(shù)據(jù)報(bào)前無(wú)需建立到遠(yuǎn)程主機(jī)的連接。只要?jiǎng)?chuàng)建一個(gè)UdpClient實(shí)例,然后調(diào)用Send方法,并傳遞遠(yuǎn)程主機(jī)名和端口號(hào)(作為一個(gè)IPEndPoint實(shí)例或作為主機(jī)名字符串和端品號(hào)整數(shù))oUdpClient可以用于發(fā)送和接收多路廣播數(shù)據(jù)報(bào)。JoinMulticastGroup方法用于加入一個(gè)多路廣播組,DropMulticastGroup方法用于退出一個(gè)多路廣播組。94使用Socket類(lèi)o Socket構(gòu)造函數(shù)三個(gè)重要參數(shù)nAddressFamily枚舉指定Socket實(shí)例用于解析地址的尋址方案,其選項(xiàng)包括AddressFamily.DecNet、.Osi、.NetBios以及最可能用到的指定

43、IP第4版地址的AddressFamily.InterNetwork等。nSocketType枚舉指定套接字的類(lèi)型。其選項(xiàng)包括:用于UDP通信的SocketType.Dgram、用于直接訪問(wèn)底層傳輸協(xié)議的.Raw,以及支持TCP通信所要求的可靠的、基于連接的雙向字節(jié)流的.StreamnProtocolType枚舉指定所需的協(xié)議。其選項(xiàng)包括:ProtocolType.Ipx、.IP、.Tcp、.Udp和.Raw。95使用Socket類(lèi)(續(xù))o 在使用面向連接的協(xié)議時(shí),如果你希望應(yīng)用程序作為服務(wù)器并等待傳入邊接,則首先必須調(diào)用Bind方法套接字綁定到一個(gè)本地IP地址和端口上,然后調(diào)用Listen方

44、法o 對(duì)于UDP協(xié)議,偵聽(tīng)傳入的數(shù)據(jù)報(bào),調(diào)用ReceiveForm方法來(lái)接收任何傳入數(shù)據(jù)報(bào),然后調(diào)用SendTo方法將數(shù)據(jù)報(bào)發(fā)送到遠(yuǎn)程主機(jī)。96使用Socket類(lèi)(續(xù))o BeginConnect和EndConnect,BeginSend和EndSend,BeginReceive和EndReceive方法使用面向連接的協(xié)議處重與客戶的異步操作。o BeginSendTo和EndSendTo以及BeginReceiveFrom和EndReceiveFrom通過(guò)無(wú)連接的協(xié)議處理異步操作。o 當(dāng)?shù)讓拥腤insock應(yīng)用程序編程接口報(bào)告一個(gè)錯(cuò)誤時(shí),所有的System.Net.Sockets類(lèi)都能返回一

45、個(gè)SocketException類(lèi)的異常。97紅外通信o IrDAListener和IrDAClient類(lèi)為紅外線通信執(zhí)行的功能與TcpListener和TcpClient執(zhí)行TCP通信的功能相同。o IrDA類(lèi)在System.Net.IrDA.dll中,要使用這兩個(gè)類(lèi),必須向項(xiàng)目中添加一個(gè)對(duì)這個(gè)動(dòng)態(tài)鏈接庫(kù)的引用。o 通過(guò)調(diào)用IrDAClient.DiscoverDevices方法,可以發(fā)現(xiàn)哪些設(shè)備在紅外線網(wǎng)絡(luò)中。這個(gè)方法返回一個(gè)IrDADeviceInfo對(duì)象數(shù)組。98紅外通信(續(xù))o 使用IrDAListener偵聽(tīng)紅外線連接n廣告一個(gè)服務(wù)并偵聽(tīng)從任何請(qǐng)求該服務(wù)的設(shè)備發(fā)來(lái)的連接請(qǐng)求,使用I

46、rDAListener(string)形式的構(gòu)造函數(shù),傳遞要求的服務(wù)名n要偵聽(tīng)從網(wǎng)絡(luò)中一個(gè)特定的設(shè)備發(fā)來(lái)的連接,創(chuàng)建一個(gè)System.Net.IrDAEndPoint實(shí)例,并指定設(shè)備ID和服務(wù)名字符串,再將這個(gè)實(shí)例傳遞給IrDAListener構(gòu)造函數(shù)。o 使用IrDAClient建立紅外線連接n使用特定的服務(wù)器字符串進(jìn)行連接n調(diào)用Connect方法并傳遞一個(gè)指定某個(gè)設(shè)備的Device ID,以及服務(wù)名的IrDAEndPoint實(shí)例。然后調(diào)用GetStream獲取底層的Stream對(duì)象。99附錄2: WinCE高級(jí)編程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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論