第十五章WindowsCENET應用開發_第1頁
第十五章WindowsCENET應用開發_第2頁
第十五章WindowsCENET應用開發_第3頁
第十五章WindowsCENET應用開發_第4頁
第十五章WindowsCENET應用開發_第5頁
已閱讀5頁,還剩183頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論