[翻譯]-WinCE 程式設計 (3rd 版)–1.3 第一個Windows CE程式

來源:互聯網
上載者:User

第一個Windows CE程式
說了這麼多,就讓我們一起看一下你的第一個Windows CE程式吧。列表1-1顯示了Hello1--為Windows CE寫的一個簡單的Hello World應用程式。

Listing 1-1: Hello1, 一個簡單的Windows應用程式

Hello1.cpp
//======================================================================
// Hello1 - A simple application for Windows CE
//
// Written for the book Programming Windows CE
// Copyright (C) 2003 Douglas Boling
//======================================================================
#include "windows.h"
  
//
// Program entry point
//
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPWSTR lpCmdLine, int nCmdShow) {
  
    printf ("Hello World/n");
    return 0;
}
 
如您所見,除了程式進入點外,代碼看上去十分類似經典的Kernighan和Ritchie版程式。在注釋之後,有一行代碼

#include "windows.h"

這個檔案包含了一組檔案,它們中定義了Windows API及其用到的結構和常量。

程式的進入點是本程式和標準C程式之間最大的差別。作為C標準入口
int main (char **argv, int argc)
的替代品,Windows CE通過標準Windows進入點[注1]
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPWSTR lpCmdLine, int nCmdShow);

構建程式環境。
Windows CE在一些方面不同於案頭版的Windows。第1個參數,hInstance為其它應用程式指明具程式執行個體,也為需要驗證這個EXE的Windows API函數提供了程式執行個體。參數hPrevInstance是從舊的Win16 API(Windows 3.1及更早的系統)遺留下來的。包括Windows CE在內的所有Win32 作業系統中,hPrevInstance 始終是0,可以忽略掉。

參數lpCmdLine指向一個Unicode字串,包含了命令列文本。從微軟Windows CE瀏覽器啟動的應用程式沒有命令列參數,但在某些情況下,例如當系統自動啟動一個程式時,系統包含一個命令列參數來說明程式為什麼被啟動。參數lpCmdLine 是Windows CE與XP出現差異的情況之一,在Windows CE裡,命令列字串是Unicode字串,在其它版本的Windows 裡,命令列字串總是ASCII的。

最後一個參數,nCmdShow,指明了程式主視窗的初始狀態。由父進程,通常是瀏覽器傳遞這個參數到程式裡。它對應用程式如何配置主視窗給出了說明。該參數可能會規定視窗最初顯示成表徵圖(SW_SHOWMINIMIZE),或者顯示最大化(SW_SHOWMAXIMIZED)來覆蓋整個案頭,或者顯示為普通(SW_RESTORE)大小來表明視窗按標準可變大小方式顯示在螢幕上。其它值規定視窗初始狀態對使用者不可見,或者規定視窗可見但不能成為使用中視窗。在Windows CE裡,這個參數的值被限制成3個狀態:普通(SW_SHOW)、隱藏(SW_HIDE)和非啟用顯示(SW_SHOWNOACTIVATE)。除非應用程式需要強制它的視窗預先確定狀態,在程式主視窗被建立後,這個值是不加修改,只是簡單的傳遞給ShowWindow函數的。

下一行是這個應用程式唯一的功能行:
printf ("Hello World/n");
Windows CE支援大部分標準C庫,包括printf,getchar等等。這一行有趣的地方在於它不像Windows CE其它任何地方,這個串不是Unicode而是ANSI。下面是對這個現象的合理解釋:對於用ANSI標準編譯的C標準庫,printf和諸如strcpy等其它字串庫函數用的是ANSI字串。當然,Windows CE支援這些標準函數的Unicode版,例如  wprintf, getwchar,和 wcscpy。

最後,用return 0;結束程式。
其它進程可以用Win32 API函數GetExitCodeProcess擷取傳回值。

構建第一個應用程式
要在你的系統上從頭建立Hello1,可以啟動MS eVC++,在[File]菜單上選擇[建立]建立一個新工程。當看到新工程的對話方塊,可以明顯的看到WinCE編程與標準Win32編程的變化。你有機會選擇在圖1-1中所顯示的各種平台。對於非MFC或ATL工程,首選是WCE Pocket PC應用(用於Pocket PC)和WCE應用(用於其它Windows CE系統)。您還可以選擇適當的目標CPU。例如,選擇Win32(WCE MIPI)來為使用MIPS CPU的Windows CE平台編譯器。無論是何種目標裝置,都要確保選擇WCE模擬器。這樣你就可以在用XP下的模擬器中運行例子程式了。
圖1-1 平台列表使eVC++能夠面向不同的Windows CE平台。

接下來,eVC++會詢問您是否想建立一個空的工程、一個簡單程式或者一個Hello World 應用。對本書裡所有的例子,都選擇空工程。這樣做是為了避免代碼嚮導向例子添加任何額外的代碼。在[File]菜單選擇[New],Hello1.cpp建立新檔案。

當為Hello 1建立或從CD複製了合適的源檔案,選擇Win32(WCE x86em) Debug作為目標平台,之後build這個程式。這一步會編譯原始碼,如果沒有編譯錯誤的話,系統自動啟動模擬器,並把EXE程式放到模擬器檔案系統裡,接下來你可以啟動Hello1。如果你在Windows 98或Me系統下,模擬器系統能夠會顯示一個錯誤資訊,因為模擬器只能在Win2000或XP下運行。

如果你有Windows CE系統,比如Pocket PC(PPC),把PPC串連到PC上,方法和同步PC的內容到PPC一樣。開啟微軟ActiveSync,建立PPC和PC的連結。為了Windows CE裝置能夠運行,雖然ActiveSync連結並不是必須的,但我發現讓它運行可以為開發環境和Windows CE系統之間建立一個更穩定的連結。

一但PC和Windows CE裝置之間的連結成功和運行,切換回eVC++,選擇合適的目標裝置(如適合iPaq Pocket PC的Win32 [WCE ARM] Debug)進行編譯和rebuild。和為模擬器建立程式一樣,如果沒有錯誤,eVC++自動下載編譯器到遠程裝置上。程式要麼被放到Object Storage Service的根目錄上,要麼放在/windows/start菜單目中。

運行該程式
要在嵌入式Winodows CE裝置H/PC上運行Hello1,單擊手持式PC的My Computer表徵圖,找到根目錄下的檔案,之後雙擊應用程式圖示啟動程式。

要在Pocket PC上運行程式,從裝置的Start菜單選擇程式就可以了。因為eVC++已經把程式下載到/windows/start菜單所在的目錄了。這種方式下,下載的應用程式自動顯示在Start菜單裡。

有問題?
如果在Pocket PC上點擊表徵圖或開始菜單選擇Hello1程式,似乎沒什麼反應。在手持式PC上,程式似乎只是重新整理了一下螢幕。這是因為程式啟動、寫到控制台並結束了。除非你從一個已經建立的控制台啟動程式,否則Windows CE會在Hello1執行printf語句時,建立一個控制台視窗,並且在Hello1結束的時候自動關閉控制台。

在Pocket PC上,應用程式可以運行,但Pocket PC並不為諸如printf之類的輸出提供控制台顯示的功能。通過把驅動程式console.dll放到Pocket PC的Windows 目錄裡,可以為Pocket PC增加控制台支援。驅動程式從驅動程式介面擷取輸入,建立螢幕視窗,列印輸出字串。控制台啟動程式可以從手持式PC和嵌入式版本的Windows CE獲得。

注1:雖然從技術上可以改變進入點原型來匹配C的標準進入點,但通常不值得這麼麻煩的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.